Browse Source

feat: endpoint type log

Seefs 2 tháng trước cách đây
mục cha
commit
7d480d5ff3

+ 1 - 102
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 = (
-    <Tag color={meta.color} type='light' shape='circle' size='small'>
-      {meta.label}
-    </Tag>
-  );
-  if (requestPath) {
-    return <Tooltip content={requestPath}>{tag}</Tooltip>;
-  }
-  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 (
-          <Space size='small' wrap>
-            {renderType(text, t)}
-            {renderEndpointTag(requestPath)}
-          </Space>
-        );
+        return <>{renderType(text, t)}</>;
       },
     },
     {

+ 6 - 0
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;
     }
 

+ 1 - 0
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",

+ 2 - 1
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"
   }
-}
+}

+ 1 - 0
web/src/i18n/locales/ru.json

@@ -1693,6 +1693,7 @@
     "请求失败": "Запрос не удался",
     "请求头覆盖": "Переопределение заголовков запроса",
     "请求并计费模型": "Запрос и выставление счёта модели",
+    "请求路径": "Путь запроса",
     "请求时长: ${time}s": "Время запроса: ${time}s",
     "请求次数": "Количество запросов",
     "请求结束后多退少补": "После вывода запроса возврат излишков и доплата недостатка",

+ 1 - 0
web/src/i18n/locales/zh.json

@@ -1666,6 +1666,7 @@
     "请求失败": "请求失败",
     "请求头覆盖": "请求头覆盖",
     "请求并计费模型": "请求并计费模型",
+    "请求路径": "请求路径",
     "请求时长: ${time}s": "请求时长: ${time}s",
     "请求次数": "请求次数",
     "请求结束后多退少补": "请求结束后多退少补",