diff --git a/web/src/components/table/usage-logs/UsageLogsColumnDefs.jsx b/web/src/components/table/usage-logs/UsageLogsColumnDefs.jsx index 5e9ec073c..9af30226a 100644 --- a/web/src/components/table/usage-logs/UsageLogsColumnDefs.jsx +++ b/web/src/components/table/usage-logs/UsageLogsColumnDefs.jsx @@ -103,100 +103,6 @@ function renderType(type, t) { } } -const endpointColorMap = { - chat: 'blue', - completions: 'blue', - messages: 'purple', - responses: 'violet', - images: 'pink', - image: 'pink', - embeddings: 'green', - embedding: 'green', - audio: 'teal', - speech: 'teal', - translations: 'teal', - transcriptions: 'teal', - rerank: 'cyan', - moderations: 'red', - models: 'orange', - engines: 'orange', - mj: 'red', - submit: 'red', - suno: 'amber', - realtime: 'indigo', - notifications: 'violet', -}; - -function formatPathSegment(segment) { - if (!segment) { - return ''; - } - const normalized = segment.replace(/^:/, '').replace(/[_-]/g, ' '); - return normalized - .split(' ') - .filter(Boolean) - .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) - .join(' '); -} - -function deriveEndpointMeta(path) { - if (!path) { - return null; - } - const cleanPath = path.split('?')[0]; - const segments = cleanPath.split('/').filter(Boolean); - if (segments.length === 0) { - return null; - } - let startIndex = 0; - if (/^v\d/i.test(segments[0])) { - startIndex = 1; - } - - const primary = segments[startIndex] || segments[segments.length - 1]; - const tailSegments = segments - .slice(startIndex + 1) - .filter((segment) => segment && !segment.startsWith(':')); - const secondary = tailSegments[tailSegments.length - 1]; - - const labelParts = []; - const formattedPrimary = formatPathSegment(primary); - if (formattedPrimary) { - labelParts.push(formattedPrimary); - } - const formattedSecondary = formatPathSegment(secondary); - if (formattedSecondary && formattedSecondary !== formattedPrimary) { - labelParts.push(formattedSecondary); - } - const label = labelParts.join(' · '); - - const color = - endpointColorMap[primary] || - (secondary ? endpointColorMap[secondary] : undefined) || - 'grey'; - - return { - label: label || formatPathSegment(primary), - color, - }; -} - -function renderEndpointTag(requestPath) { - const meta = deriveEndpointMeta(requestPath); - if (!meta) { - return null; - } - const tag = ( - - {meta.label} - - ); - if (requestPath) { - return {tag}; - } - return tag; -} - function renderIsStream(bool, t) { if (bool) { return ( @@ -465,14 +371,7 @@ export const getLogsColumns = ({ title: t('类型'), dataIndex: 'type', render: (text, record, index) => { - const other = getLogOther(record.other) || {}; - const requestPath = other.request_path; - return ( - - {renderType(text, t)} - {renderEndpointTag(requestPath)} - - ); + return <>{renderType(text, t)}; }, }, { diff --git a/web/src/hooks/usage-logs/useUsageLogsData.jsx b/web/src/hooks/usage-logs/useUsageLogsData.jsx index 36684c2c5..6041d7427 100644 --- a/web/src/hooks/usage-logs/useUsageLogsData.jsx +++ b/web/src/hooks/usage-logs/useUsageLogsData.jsx @@ -468,6 +468,12 @@ export const useLogsData = () => { }); } } + if (other?.request_path) { + expandDataLocal.push({ + key: t('请求路径'), + value: other.request_path, + }); + } expandDatesLocal[logs[i].key] = expandDataLocal; } diff --git a/web/src/i18n/locales/en.json b/web/src/i18n/locales/en.json index 7ec941281..db62d5f59 100644 --- a/web/src/i18n/locales/en.json +++ b/web/src/i18n/locales/en.json @@ -1675,6 +1675,7 @@ "请求失败": "Request failed", "请求头覆盖": "Request header override", "请求并计费模型": "Request and charge model", + "请求路径": "Request path", "请求时长: ${time}s": "Request time: ${time}s", "请求次数": "Number of Requests", "请求结束后多退少补": "Adjust after request completion", diff --git a/web/src/i18n/locales/fr.json b/web/src/i18n/locales/fr.json index bafe945c0..27789a191 100644 --- a/web/src/i18n/locales/fr.json +++ b/web/src/i18n/locales/fr.json @@ -1684,6 +1684,7 @@ "请求失败": "Échec de la demande", "请求头覆盖": "Remplacement des en-têtes de demande", "请求并计费模型": "Modèle de demande et de facturation", + "请求路径": "Chemin de requête", "请求时长: ${time}s": "Durée de la requête : ${time}s", "请求次数": "Nombre de demandes", "请求结束后多退少补": "Ajuster après la fin de la demande", @@ -2081,4 +2082,4 @@ "默认测试模型": "Modèle de test par défaut", "默认补全倍率": "Taux de complétion par défaut" } -} \ No newline at end of file +} diff --git a/web/src/i18n/locales/ru.json b/web/src/i18n/locales/ru.json index 7f031dccb..db0a47626 100644 --- a/web/src/i18n/locales/ru.json +++ b/web/src/i18n/locales/ru.json @@ -1693,6 +1693,7 @@ "请求失败": "Запрос не удался", "请求头覆盖": "Переопределение заголовков запроса", "请求并计费模型": "Запрос и выставление счёта модели", + "请求路径": "Путь запроса", "请求时长: ${time}s": "Время запроса: ${time}s", "请求次数": "Количество запросов", "请求结束后多退少补": "После вывода запроса возврат излишков и доплата недостатка", diff --git a/web/src/i18n/locales/zh.json b/web/src/i18n/locales/zh.json index fe085af12..62c8836be 100644 --- a/web/src/i18n/locales/zh.json +++ b/web/src/i18n/locales/zh.json @@ -1666,6 +1666,7 @@ "请求失败": "请求失败", "请求头覆盖": "请求头覆盖", "请求并计费模型": "请求并计费模型", + "请求路径": "请求路径", "请求时长: ${time}s": "请求时长: ${time}s", "请求次数": "请求次数", "请求结束后多退少补": "请求结束后多退少补",