diff --git a/src/components/Option/Metering/detail.tsx b/src/components/Option/Metering/detail.tsx index 4709f80..1551f5c 100644 --- a/src/components/Option/Metering/detail.tsx +++ b/src/components/Option/Metering/detail.tsx @@ -84,7 +84,7 @@ const columns: TableProps["columns"] = [ dataIndex: "date", key: "date", render: (date) => { - return
{formatDate(date ?? new Date())}
+ return
{formatDate(new Date(date))}
} }, { diff --git a/src/components/Option/Metering/listDetail.tsx b/src/components/Option/Metering/listDetail.tsx index 67fdd34..bd8f6be 100644 --- a/src/components/Option/Metering/listDetail.tsx +++ b/src/components/Option/Metering/listDetail.tsx @@ -2,14 +2,13 @@ import { Card, List, Table, - Tag, Space, TableProps, Divider, Typography, Tooltip } from "antd" -import { NavLink, useParams } from "react-router-dom" +import { useParams } from "react-router-dom" import { useStoreMessageOption } from "@/store/option.tsx" import { useMemo } from "react" @@ -24,26 +23,28 @@ interface DataType { const columns: TableProps["columns"] = [ { - title: '序号', - key: 'index', + title: "序号", + key: "index", width: 100, - render: (_text, _record, index) => index + 1, // 索引从0开始,+1后从1显示 + render: (_text, _record, index) => index + 1 // 索引从0开始,+1后从1显示 }, { title: "标识", dataIndex: "doId", - key: "doId" + key: "doId", + width: 350 }, { title: "提供方", dataIndex: "data_space", - key: "data_space" + key: "data_space", + width: 250 }, { - title: "token数量", + title: "token数", key: "tokenCount", dataIndex: "tokenCount", - width: 100 + width: 120 }, { title: "内容", @@ -70,6 +71,10 @@ export const ListDetail = () => { const modelData = useMemo( () => [ + { + key: "数联网引用token总数", + value: record.iodTokenCount + }, { key: "大模型输入token数", value: record.modelInputTokenCount @@ -129,7 +134,7 @@ export const ListDetail = () => { return (
( @@ -139,7 +144,12 @@ export const ListDetail = () => { style={{ marginBottom: "2rem" }} /> - + + 数联网引用数据 + columns={columns} dataSource={record.iodData} /> + + + 输入token详情 { dataSource={inputTokenData} renderItem={(item) => ( - + {item.key} - + {item.value} )} style={{ marginBottom: "1rem" }} /> - - columns={columns} dataSource={record.iodData} /> - - + 输出token详情 { header={
数联网搜索关键词
} renderItem={(item) => ( - {item.key} - + + {item.key} + + {item.value} diff --git a/src/hooks/useMessageOption.tsx b/src/hooks/useMessageOption.tsx index aefd8ed..9b850a0 100644 --- a/src/hooks/useMessageOption.tsx +++ b/src/hooks/useMessageOption.tsx @@ -194,7 +194,7 @@ export const useMessageOption = () => { const meter: MeteringEntry = { id: generateMessageId, queryContent: message, - date: new Date() + date: new Date().getTime() } as MeteringEntry if (!isRegenerate) { @@ -489,20 +489,22 @@ export const useMessageOption = () => { // Save metering entry const { cot, content } = responseResolver(fullText) - setMeteringEntries([ { + const _meteringEntries = [{ ...meter, modelInputTokenCount: prompt.length, modelOutputTokenCount: fullText.length, - model: ollama.modelName, + model: ollama.modelName ?? ollama.model, relatedDataCount: iodData?.length ?? 0, - timeTaken: new Date().getTime() - meter.date.getTime(), - date: chatStartTime, + timeTaken: new Date().getTime() - chatStartTime.getTime(), + date: chatStartTime.getTime(), cot, responseContent: content, modelResponseContent: fullText, }, ...meteringEntries, - ]) + ] + setMeteringEntries(_meteringEntries) + localStorage.setItem("meteringEntries", JSON.stringify(_meteringEntries)) } catch (e) { const errorSave = await saveMessageOnError({ e, diff --git a/src/store/option.tsx b/src/store/option.tsx index 9cef91c..9d524eb 100644 --- a/src/store/option.tsx +++ b/src/store/option.tsx @@ -100,7 +100,7 @@ export type MeteringEntry = { // 大模型输出token数量 modelOutputTokenCount: number // 日期 - date: Date + date: number // 耗时 timeTaken: number // 大模型回答的全部内容 @@ -120,7 +120,7 @@ export const useStoreMessageOption = create((set) => ({ setMessages: (messages) => set({ messages }), history: [], setHistory: (history) => set({ history }), - meteringEntries: [], + meteringEntries: JSON.parse(localStorage.getItem("meteringEntries") || JSON.stringify([])), setMeteringEntries: (meteringEntries) => set({ meteringEntries }), streaming: false, setStreaming: (streaming) => set({ streaming }),