From 6bb974f1e8651469a1ed5b2b138365870972673a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B9=E9=9B=AA?= <2b@yorha.xyz> Date: Wed, 10 Jun 2026 17:18:52 +0900 Subject: [PATCH] feat(ui): i18n for view_logs batch 4 --- .../components/view_logs/LogsTableToolbar.tsx | 36 +++--- .../view_logs/RequestResponsePanel.tsx | 32 +++-- .../ToolsSection/FormattedToolView.tsx | 12 +- .../ToolsSection/ToolExpandedContent.tsx | 8 +- .../view_logs/ToolsSection/ToolsSection.tsx | 6 +- .../view_logs/VectorStoreViewer.tsx | 27 ++-- .../src/components/view_logs/audit_logs.tsx | 79 ++++++------ .../src/components/view_logs/columns.tsx | 84 ++++++------- ui/litellm-dashboard/src/locales/en.json | 115 ++++++++++++++++++ ui/litellm-dashboard/src/locales/zh-CN.json | 115 ++++++++++++++++++ 10 files changed, 390 insertions(+), 124 deletions(-) diff --git a/ui/litellm-dashboard/src/components/view_logs/LogsTableToolbar.tsx b/ui/litellm-dashboard/src/components/view_logs/LogsTableToolbar.tsx index b3e2888be24..a8a0183a368 100644 --- a/ui/litellm-dashboard/src/components/view_logs/LogsTableToolbar.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/LogsTableToolbar.tsx @@ -2,6 +2,7 @@ import moment from "moment"; import { useEffect, useRef, useState } from "react"; import { SyncOutlined } from "@ant-design/icons"; import { Button, Switch } from "antd"; +import { useTranslation } from "react-i18next"; import { QUICK_SELECT_OPTIONS } from "./constants"; import { getTimeRangeDisplay } from "./logs_utils"; import type { PaginatedResponse } from "./log_filter_logic"; @@ -49,6 +50,7 @@ export function LogsTableToolbar({ onRefetch, filteredLogs, }: LogsTableToolbarProps) { + const { t } = useTranslation(); const [quickSelectOpen, setQuickSelectOpen] = useState(false); const quickSelectRef = useRef(null); @@ -75,7 +77,7 @@ export function LogsTableToolbar({
onSearchChange(e.target.value)} @@ -140,7 +142,7 @@ export function LogsTableToolbar({ className={`w-full px-3 py-2 text-left text-sm hover:bg-gray-50 rounded-md ${isCustomDate ? "bg-blue-50 text-blue-600" : ""}`} onClick={() => onIsCustomDateChange(!isCustomDate)} > - Custom Range + {t("viewLogs.logsTableToolbar.customRange")}
@@ -148,7 +150,7 @@ export function LogsTableToolbar({
- Live Tail + {t("viewLogs.logsTableToolbar.liveTail")}
@@ -157,9 +159,9 @@ export function LogsTableToolbar({ icon={} onClick={onRefetch} disabled={isButtonLoading} - title="Fetch data" + title={t("viewLogs.logsTableToolbar.fetchData")} > - {isButtonLoading ? "Fetching" : "Fetch"} + {isButtonLoading ? t("viewLogs.logsTableToolbar.fetching") : t("viewLogs.logsTableToolbar.fetch")} @@ -176,7 +178,7 @@ export function LogsTableToolbar({ className="px-3 py-2 border rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" /> - to + {t("viewLogs.logsTableToolbar.to")}
- Showing {isLoading ? "..." : filteredLogs ? (currentPage - 1) * pageSize + 1 : 0} -{" "} - {isLoading ? "..." : filteredLogs ? Math.min(currentPage * pageSize, filteredLogs.total) : 0} of{" "} - {isLoading ? "..." : filteredLogs ? filteredLogs.total : 0} results + {t("viewLogs.logsTableToolbar.showing", { + from: isLoading ? "..." : filteredLogs ? (currentPage - 1) * pageSize + 1 : 0, + to: isLoading ? "..." : filteredLogs ? Math.min(currentPage * pageSize, filteredLogs.total) : 0, + total: isLoading ? "..." : filteredLogs ? filteredLogs.total : 0, + })}
- Page {isLoading ? "..." : currentPage} of{" "} - {isLoading ? "..." : filteredLogs ? filteredLogs.total_pages : 1} + {t("viewLogs.logsTableToolbar.page", { + current: isLoading ? "..." : currentPage, + total: isLoading ? "..." : filteredLogs ? filteredLogs.total_pages : 1, + })}
@@ -224,10 +230,10 @@ export function LogsTableToolbar({ {isLiveTail && currentPage === 1 && (
- Auto-refreshing every 15 seconds + {t("viewLogs.logsTableToolbar.autoRefreshing")}
)} diff --git a/ui/litellm-dashboard/src/components/view_logs/RequestResponsePanel.tsx b/ui/litellm-dashboard/src/components/view_logs/RequestResponsePanel.tsx index da9323f8172..600bdad386d 100644 --- a/ui/litellm-dashboard/src/components/view_logs/RequestResponsePanel.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/RequestResponsePanel.tsx @@ -2,6 +2,7 @@ import { LogEntry } from "./columns"; import NotificationsManager from "../molecules/notifications_manager"; import { JsonView, defaultStyles } from "react-json-view-lite"; import "react-json-view-lite/dist/index.css"; +import { useTranslation } from "react-i18next"; interface RequestResponsePanelProps { row: { @@ -24,6 +25,7 @@ export function RequestResponsePanel({ getRawRequest, formattedResponse, }: RequestResponsePanelProps) { + const { t } = useTranslation(); const copyToClipboard = async (text: string) => { try { // Try modern clipboard API first @@ -57,18 +59,18 @@ export function RequestResponsePanel({ const handleCopyRequest = async () => { const success = await copyToClipboard(JSON.stringify(getRawRequest(), null, 2)); if (success) { - NotificationsManager.success("Request copied to clipboard"); + NotificationsManager.success(t("viewLogs.requestResponsePanel.requestCopied")); } else { - NotificationsManager.fromBackend("Failed to copy request"); + NotificationsManager.fromBackend(t("viewLogs.requestResponsePanel.failedToCopyRequest")); } }; const handleCopyResponse = async () => { const success = await copyToClipboard(JSON.stringify(formattedResponse(), null, 2)); if (success) { - NotificationsManager.success("Response copied to clipboard"); + NotificationsManager.success(t("viewLogs.requestResponsePanel.responseCopied")); } else { - NotificationsManager.fromBackend("Failed to copy response"); + NotificationsManager.fromBackend(t("viewLogs.requestResponsePanel.failedToCopyResponse")); } }; @@ -77,8 +79,12 @@ export function RequestResponsePanel({ {/* Request Side */}
-

Request

-
) : ( -
Response data not available
+
+ {t("viewLogs.requestResponsePanel.responseNotAvailable")} +
)}
diff --git a/ui/litellm-dashboard/src/components/view_logs/ToolsSection/FormattedToolView.tsx b/ui/litellm-dashboard/src/components/view_logs/ToolsSection/FormattedToolView.tsx index c58bde72995..990a8c832bf 100644 --- a/ui/litellm-dashboard/src/components/view_logs/ToolsSection/FormattedToolView.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/ToolsSection/FormattedToolView.tsx @@ -3,6 +3,7 @@ */ import { Typography, Table } from "antd"; +import { useTranslation } from "react-i18next"; import { ParsedTool, ParameterRow } from "./types"; const { Text } = Typography; @@ -12,6 +13,7 @@ interface FormattedToolViewProps { } export function FormattedToolView({ tool }: FormattedToolViewProps) { + const { t } = useTranslation(); // Parse parameters for table display const parameterRows: ParameterRow[] = Object.entries(tool.parameters?.properties || {}).map( ([name, schema]: [string, any]) => ({ @@ -25,7 +27,7 @@ export function FormattedToolView({ tool }: FormattedToolViewProps) { const columns = [ { - title: "Parameter", + title: t("viewLogs.formattedToolView.colParameter"), dataIndex: "name", key: "name", render: (name: string, record: ParameterRow) => ( @@ -36,7 +38,7 @@ export function FormattedToolView({ tool }: FormattedToolViewProps) { ), }, { - title: "Type", + title: t("viewLogs.formattedToolView.colType"), dataIndex: "type", key: "type", render: (type: string) => ( @@ -46,7 +48,7 @@ export function FormattedToolView({ tool }: FormattedToolViewProps) { ), }, { - title: "Description", + title: t("viewLogs.formattedToolView.colDescription"), dataIndex: "description", key: "description", render: (desc: string) => {desc}, @@ -80,7 +82,7 @@ export function FormattedToolView({ tool }: FormattedToolViewProps) { marginBottom: 8, }} > - Parameters + {t("viewLogs.formattedToolView.parametersLabel")} @@ -97,7 +99,7 @@ export function FormattedToolView({ tool }: FormattedToolViewProps) { marginBottom: 8, }} > - Called With + {t("viewLogs.formattedToolView.calledWithLabel")}
("formatted"); return ( @@ -30,11 +32,11 @@ export function ToolExpandedContent({ tool }: ToolExpandedContentProps) { }} > - Description + {t("viewLogs.toolExpandedContent.descriptionLabel")} setViewMode(e.target.value)}> - Formatted - JSON + {t("viewLogs.toolExpandedContent.viewFormatted")} + {t("viewLogs.toolExpandedContent.viewJson")}
diff --git a/ui/litellm-dashboard/src/components/view_logs/ToolsSection/ToolsSection.tsx b/ui/litellm-dashboard/src/components/view_logs/ToolsSection/ToolsSection.tsx index d957e063f16..c1c2222ce09 100644 --- a/ui/litellm-dashboard/src/components/view_logs/ToolsSection/ToolsSection.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/ToolsSection/ToolsSection.tsx @@ -4,6 +4,7 @@ */ import { Collapse, Typography } from "antd"; +import { useTranslation } from "react-i18next"; import { LogEntry } from "../columns"; import { parseToolsFromLog } from "./utils"; import { ToolItem } from "./ToolItem"; @@ -15,6 +16,7 @@ interface ToolsSectionProps { } export function ToolsSection({ log }: ToolsSectionProps) { + const { t } = useTranslation(); const tools = parseToolsFromLog(log); // Don't render if no tools @@ -40,9 +42,9 @@ export function ToolsSection({ log }: ToolsSectionProps) { key: "1", label: (
-

Tools

+

{t("viewLogs.toolsSection.title")}

- {totalTools} provided, {calledTools} called + {t("viewLogs.toolsSection.summary", { total: totalTools, called: calledTools })} • {toolNamePreview} diff --git a/ui/litellm-dashboard/src/components/view_logs/VectorStoreViewer.tsx b/ui/litellm-dashboard/src/components/view_logs/VectorStoreViewer.tsx index 0fa504cf2db..6c3f273d104 100644 --- a/ui/litellm-dashboard/src/components/view_logs/VectorStoreViewer.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/VectorStoreViewer.tsx @@ -1,5 +1,6 @@ import React, { useState } from "react"; import { Collapse } from "antd"; +import { useTranslation } from "react-i18next"; import { getProviderLogoAndName } from "../provider_info_helpers"; interface VectorStoreContent { @@ -31,6 +32,7 @@ interface VectorStoreViewerProps { } export function VectorStoreViewer({ data }: VectorStoreViewerProps) { + const { t } = useTranslation(); const [expandedResults, setExpandedResults] = useState>({}); if (!data || data.length === 0) { @@ -63,7 +65,7 @@ export function VectorStoreViewer({ data }: VectorStoreViewerProps) { items={[ { key: "1", - label:

Vector Store Requests

, + label:

{t("viewLogs.vectorStoreViewer.title")}

, children: (
{data.map((request, index) => ( @@ -72,15 +74,17 @@ export function VectorStoreViewer({ data }: VectorStoreViewerProps) {
- Query: + {t("viewLogs.vectorStoreViewer.labelQuery")} {request.query}
- Vector Store ID: + + {t("viewLogs.vectorStoreViewer.labelVectorStoreId")} + {request.vector_store_id}
- Provider: + {t("viewLogs.vectorStoreViewer.labelProvider")} {(() => { const { logo, displayName } = getProviderLogoAndName(request.custom_llm_provider); @@ -96,22 +100,22 @@ export function VectorStoreViewer({ data }: VectorStoreViewerProps) {
- Start Time: + {t("viewLogs.vectorStoreViewer.labelStartTime")} {formatTime(request.start_time)}
- End Time: + {t("viewLogs.vectorStoreViewer.labelEndTime")} {formatTime(request.end_time)}
- Duration: + {t("viewLogs.vectorStoreViewer.labelDuration")} {calculateDuration(request.start_time, request.end_time)}
-

Search Results

+

{t("viewLogs.vectorStoreViewer.searchResults")}

{request.vector_store_search_response.data.map((result, resultIndex) => { const isExpanded = expandedResults[`${index}-${resultIndex}`] || false; @@ -131,9 +135,12 @@ export function VectorStoreViewer({ data }: VectorStoreViewerProps) {
- Result {resultIndex + 1} + + {t("viewLogs.vectorStoreViewer.resultItem", { number: resultIndex + 1 })} + - Score: {result.score.toFixed(4)} + {t("viewLogs.vectorStoreViewer.score")}{" "} + {result.score.toFixed(4)}
diff --git a/ui/litellm-dashboard/src/components/view_logs/audit_logs.tsx b/ui/litellm-dashboard/src/components/view_logs/audit_logs.tsx index f8a51f69658..24e5aa31e9a 100644 --- a/ui/litellm-dashboard/src/components/view_logs/audit_logs.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/audit_logs.tsx @@ -4,6 +4,7 @@ import { Table, Tag, Input, Select, Button, Pagination, Spin } from "antd"; import { ReloadOutlined, LoadingOutlined } from "@ant-design/icons"; import type { ColumnsType } from "antd/es/table"; import moment from "moment"; +import { useTranslation } from "react-i18next"; import { uiAuditLogsCall } from "../networking"; import { AuditLogEntry } from "./columns"; import { AuditLogDrawer } from "./AuditLogDrawer/AuditLogDrawer"; @@ -11,6 +12,14 @@ import DefaultProxyAdminTag from "../common_components/DefaultProxyAdminTag"; const { Search } = Input; +const TABLE_NAME_I18N_KEY: Record = { + LiteLLM_VerificationToken: "viewLogs.auditLogs.tableKeys", + LiteLLM_TeamTable: "viewLogs.auditLogs.tableTeams", + LiteLLM_UserTable: "viewLogs.auditLogs.tableUsers", + LiteLLM_OrganizationTable: "viewLogs.auditLogs.tableOrganizations", + LiteLLM_ProxyModelTable: "viewLogs.auditLogs.tableModels", +}; + interface AuditLogsProps { accessToken: string | null; token: string | null; @@ -23,14 +32,6 @@ interface AuditLogsProps { const asset_logos_folder = "../ui/assets/"; export const auditLogsPreviewImg = `${asset_logos_folder}audit-logs-preview.png`; -const TABLE_NAME_DISPLAY: Record = { - LiteLLM_VerificationToken: "Keys", - LiteLLM_TeamTable: "Teams", - LiteLLM_UserTable: "Users", - LiteLLM_OrganizationTable: "Organizations", - LiteLLM_ProxyModelTable: "Models", -}; - const ACTION_COLOR: Record = { created: "green", updated: "blue", @@ -41,6 +42,7 @@ const ACTION_COLOR: Record = { const PAGE_SIZE = 50; export default function AuditLogs({ userID, userRole, token, accessToken, isActive, premiumUser }: AuditLogsProps) { + const { t } = useTranslation(); const [page, setPage] = useState(1); // Filter state @@ -90,7 +92,7 @@ export default function AuditLogs({ userID, userRole, token, accessToken, isActi const columns: ColumnsType = [ { - title: "Timestamp", + title: t("viewLogs.auditLogs.colTimestamp"), dataIndex: "updated_at", key: "updated_at", width: 200, @@ -101,7 +103,7 @@ export default function AuditLogs({ userID, userRole, token, accessToken, isActi ), }, { - title: "Action", + title: t("viewLogs.auditLogs.colAction"), dataIndex: "action", key: "action", width: 100, @@ -112,27 +114,30 @@ export default function AuditLogs({ userID, userRole, token, accessToken, isActi ), }, { - title: "Table", + title: t("viewLogs.auditLogs.colTable"), dataIndex: "table_name", key: "table_name", width: 130, - render: (val: string) => TABLE_NAME_DISPLAY[val] ?? val, + render: (val: string) => { + const key = TABLE_NAME_I18N_KEY[val]; + return key ? t(key) : val; + }, }, { - title: "Object ID", + title: t("viewLogs.auditLogs.colObjectId"), dataIndex: "object_id", key: "object_id", render: (val: string) => {val}, }, { - title: "Changed By", + title: t("viewLogs.auditLogs.colChangedBy"), dataIndex: "changed_by", key: "changed_by", width: 200, render: (val: string) => , }, { - title: "API Key (Hash)", + title: t("viewLogs.auditLogs.colApiKeyHash"), dataIndex: "changed_by_api_key", key: "changed_by_api_key", width: 140, @@ -143,16 +148,14 @@ export default function AuditLogs({ userID, userRole, token, accessToken, isActi if (!premiumUser) { return (
-

✨ Enterprise Feature.

-

- This is a LiteLLM Enterprise feature, and requires a valid key to use. -

+

✨ {t("viewLogs.auditLogs.enterpriseTitle")}

+

{t("viewLogs.auditLogs.enterpriseDesc")}

- Here's a preview of what Audit Logs offer: + {t("viewLogs.auditLogs.previewText")}

Audit Logs Preview
-

Audit Logs

+

{t("viewLogs.auditLogs.pageTitle")}

{/* Filters + pagination on same row */}
{ @@ -198,7 +201,7 @@ export default function AuditLogs({ userID, userRole, token, accessToken, isActi }} /> { @@ -213,7 +216,7 @@ export default function AuditLogs({ userID, userRole, token, accessToken, isActi }} /> { @@ -228,7 +231,7 @@ export default function AuditLogs({ userID, userRole, token, accessToken, isActi }} /> { @@ -243,14 +246,14 @@ export default function AuditLogs({ userID, userRole, token, accessToken, isActi }} /> { setTableName(val); @@ -285,7 +288,7 @@ export default function AuditLogs({ userID, userRole, token, accessToken, isActi current={page} pageSize={PAGE_SIZE} total={total} - showTotal={(t) => `${t} total`} + showTotal={(n) => t("viewLogs.auditLogs.showTotal", { total: n })} showSizeChanger={false} size="small" onChange={(p) => setPage(p)} diff --git a/ui/litellm-dashboard/src/components/view_logs/columns.tsx b/ui/litellm-dashboard/src/components/view_logs/columns.tsx index 5a253dd1122..e886b9f61b7 100644 --- a/ui/litellm-dashboard/src/components/view_logs/columns.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/columns.tsx @@ -3,6 +3,7 @@ import type { ColumnDef } from "@tanstack/react-table"; import { Badge, Button } from "@tremor/react"; import { Tooltip } from "antd"; import React, { useState } from "react"; +import i18n from "@/lib/i18n"; import { getProviderLogoAndName } from "../provider_info_helpers"; import { TableHeaderSortDropdown } from "../common_components/TableHeaderSortDropdown/TableHeaderSortDropdown"; import { TimeCell } from "./time_cell"; @@ -110,19 +111,19 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] header: sortProps ? () => ( ) - : "Time", + : i18n.t("viewLogs.columns.colTime"), accessorKey: "startTime", cell: (info: any) => , }, { - header: "Type", + header: i18n.t("viewLogs.columns.colType"), id: "type", cell: (info: any) => { const row = info.row.original; @@ -166,7 +167,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] }, }, { - header: "Status", + header: i18n.t("viewLogs.columns.colStatus"), accessorKey: "metadata.status", cell: (info: any) => { const status = info.getValue() || "Success"; @@ -178,13 +179,13 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] isSuccess ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800" }`} > - {isSuccess ? "Success" : "Failure"} + {isSuccess ? i18n.t("viewLogs.columns.statusSuccess") : i18n.t("viewLogs.columns.statusFailure")} ); }, }, { - header: "Session ID", + header: i18n.t("viewLogs.columns.colSessionId"), accessorKey: "session_id", cell: (info: any) => { const value = String(info.getValue() || ""); @@ -205,7 +206,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] }, { - header: "Request ID", + header: i18n.t("viewLogs.columns.colRequestId"), accessorKey: "request_id", cell: (info: any) => ( @@ -217,14 +218,14 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] header: sortProps ? () => ( ) - : "Cost", + : i18n.t("viewLogs.columns.colCost"), accessorKey: "spend", cell: (info: any) => { const row = info.row.original; @@ -238,7 +239,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] {mcpCount > 0 && mcpSpend > 0 && ( - incl. {getSpendString(mcpSpend)} from {mcpCount} MCP + {i18n.t("viewLogs.columns.mcpCostNote", { spend: getSpendString(mcpSpend), count: mcpCount })} )}
@@ -249,14 +250,14 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] header: sortProps ? () => ( ) - : "Duration (s)", + : i18n.t("viewLogs.columns.colDuration"), accessorKey: "request_duration_ms", cell: (info: any) => { const ms = info.getValue(); @@ -273,14 +274,14 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] header: sortProps ? () => ( ) - : "TTFT (s)", + : i18n.t("viewLogs.columns.colTtft"), accessorKey: "completionStartTime", cell: (info: any) => { const row = info.row.original; @@ -299,7 +300,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] }, }, { - header: "Team Name", + header: i18n.t("viewLogs.columns.colTeamName"), accessorKey: "metadata.user_api_key_team_alias", cell: (info: any) => ( @@ -308,7 +309,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ), }, { - header: "Key Hash", + header: i18n.t("viewLogs.columns.colKeyHash"), accessorKey: "metadata.user_api_key", cell: (info: any) => { const value = String(info.getValue() || "-"); @@ -327,7 +328,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] }, }, { - header: "Key Name", + header: i18n.t("viewLogs.columns.colKeyName"), accessorKey: "metadata.user_api_key_alias", cell: (info: any) => ( @@ -339,14 +340,14 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] header: sortProps ? () => ( ) - : "Model", + : i18n.t("viewLogs.columns.colModel"), accessorKey: "model", cell: (info: any) => { const row = info.row.original; @@ -376,14 +377,14 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] header: sortProps ? () => ( ) - : "Tokens", + : i18n.t("viewLogs.columns.colTokens"), accessorKey: "total_tokens", cell: (info: any) => { const row = info.row.original; @@ -398,7 +399,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] }, }, { - header: "Internal User", + header: i18n.t("viewLogs.columns.colInternalUser"), accessorKey: "user", cell: (info: any) => ( @@ -407,7 +408,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ), }, { - header: "End User", + header: i18n.t("viewLogs.columns.colEndUser"), accessorKey: "end_user", cell: (info: any) => ( @@ -417,7 +418,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] }, { - header: "Tags", + header: i18n.t("viewLogs.columns.colTags"), accessorKey: "request_tags", cell: (info: any) => { const tags = info.getValue(); @@ -483,11 +484,11 @@ export const RequestResponsePanel = ({ request, response }: { request: any; resp
-

Request

+

{i18n.t("viewLogs.requestResponsePanel.request")}

{isExpanded && (
{jsonString}
@@ -596,7 +598,7 @@ export const auditLogColumns: ColumnDef[] = [