refactor(components): 优化计量详情页面布局和内容展示
-调整表格列宽和样式,提高可读性 - 添加数联网引用token总数字段 - 修改数联网引用数据卡片为表格形式 - 优化输入和输出token详情的样式 -调整列表布局,增加全宽样式
This commit is contained in:
parent
c5fa739a95
commit
6a597da44f
@ -84,7 +84,7 @@ const columns: TableProps<MeteringEntry>["columns"] = [
|
|||||||
dataIndex: "date",
|
dataIndex: "date",
|
||||||
key: "date",
|
key: "date",
|
||||||
render: (date) => {
|
render: (date) => {
|
||||||
return <div>{formatDate(date ?? new Date())}</div>
|
return <div>{formatDate(new Date(date))}</div>
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -2,14 +2,13 @@ import {
|
|||||||
Card,
|
Card,
|
||||||
List,
|
List,
|
||||||
Table,
|
Table,
|
||||||
Tag,
|
|
||||||
Space,
|
Space,
|
||||||
TableProps,
|
TableProps,
|
||||||
Divider,
|
Divider,
|
||||||
Typography,
|
Typography,
|
||||||
Tooltip
|
Tooltip
|
||||||
} from "antd"
|
} from "antd"
|
||||||
import { NavLink, useParams } from "react-router-dom"
|
import { useParams } from "react-router-dom"
|
||||||
import { useStoreMessageOption } from "@/store/option.tsx"
|
import { useStoreMessageOption } from "@/store/option.tsx"
|
||||||
import { useMemo } from "react"
|
import { useMemo } from "react"
|
||||||
|
|
||||||
@ -24,26 +23,28 @@ interface DataType {
|
|||||||
|
|
||||||
const columns: TableProps<DataType>["columns"] = [
|
const columns: TableProps<DataType>["columns"] = [
|
||||||
{
|
{
|
||||||
title: '序号',
|
title: "序号",
|
||||||
key: 'index',
|
key: "index",
|
||||||
width: 100,
|
width: 100,
|
||||||
render: (_text, _record, index) => index + 1, // 索引从0开始,+1后从1显示
|
render: (_text, _record, index) => index + 1 // 索引从0开始,+1后从1显示
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "标识",
|
title: "标识",
|
||||||
dataIndex: "doId",
|
dataIndex: "doId",
|
||||||
key: "doId"
|
key: "doId",
|
||||||
|
width: 350
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "提供方",
|
title: "提供方",
|
||||||
dataIndex: "data_space",
|
dataIndex: "data_space",
|
||||||
key: "data_space"
|
key: "data_space",
|
||||||
|
width: 250
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "token数量",
|
title: "token数",
|
||||||
key: "tokenCount",
|
key: "tokenCount",
|
||||||
dataIndex: "tokenCount",
|
dataIndex: "tokenCount",
|
||||||
width: 100
|
width: 120
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "内容",
|
title: "内容",
|
||||||
@ -70,6 +71,10 @@ export const ListDetail = () => {
|
|||||||
|
|
||||||
const modelData = useMemo(
|
const modelData = useMemo(
|
||||||
() => [
|
() => [
|
||||||
|
{
|
||||||
|
key: "数联网引用token总数",
|
||||||
|
value: record.iodTokenCount
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: "大模型输入token数",
|
key: "大模型输入token数",
|
||||||
value: record.modelInputTokenCount
|
value: record.modelInputTokenCount
|
||||||
@ -129,7 +134,7 @@ export const ListDetail = () => {
|
|||||||
return (
|
return (
|
||||||
<div className="p-[1rem] pt-[4rem]">
|
<div className="p-[1rem] pt-[4rem]">
|
||||||
<List
|
<List
|
||||||
grid={{ gutter: 16, column: 3 }}
|
grid={{ gutter: 16, column: 4 }}
|
||||||
dataSource={modelData}
|
dataSource={modelData}
|
||||||
renderItem={(item) => (
|
renderItem={(item) => (
|
||||||
<List.Item>
|
<List.Item>
|
||||||
@ -139,7 +144,12 @@ export const ListDetail = () => {
|
|||||||
style={{ marginBottom: "2rem" }}
|
style={{ marginBottom: "2rem" }}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Space direction="vertical" size={10}>
|
<Space direction="vertical" className="w-full" size={10}>
|
||||||
|
<Divider orientation="left">数联网引用数据</Divider>
|
||||||
|
<Table<DataType> columns={columns} dataSource={record.iodData} />
|
||||||
|
</Space>
|
||||||
|
|
||||||
|
<Space direction="vertical" className="w-full" size={10}>
|
||||||
<Divider orientation="left">输入token详情</Divider>
|
<Divider orientation="left">输入token详情</Divider>
|
||||||
<List
|
<List
|
||||||
bordered
|
bordered
|
||||||
@ -147,22 +157,24 @@ export const ListDetail = () => {
|
|||||||
dataSource={inputTokenData}
|
dataSource={inputTokenData}
|
||||||
renderItem={(item) => (
|
renderItem={(item) => (
|
||||||
<List.Item style={{ justifyContent: "flex-start" }}>
|
<List.Item style={{ justifyContent: "flex-start" }}>
|
||||||
<Typography.Paragraph style={{ marginBottom: 0 }} className="mr-1">
|
<Typography.Paragraph
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
className="mr-1">
|
||||||
{item.key}
|
{item.key}
|
||||||
</Typography.Paragraph>
|
</Typography.Paragraph>
|
||||||
<Tooltip placement="topLeft" style={{ marginBottom: 0 }} title={item.value}>
|
<Tooltip
|
||||||
|
placement="topLeft"
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
title={item.value}>
|
||||||
{item.value}
|
{item.value}
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</List.Item>
|
</List.Item>
|
||||||
)}
|
)}
|
||||||
style={{ marginBottom: "1rem" }}
|
style={{ marginBottom: "1rem" }}
|
||||||
/>
|
/>
|
||||||
<Card title="数联网引用数据">
|
|
||||||
<Table<DataType> columns={columns} dataSource={record.iodData} />
|
|
||||||
</Card>
|
|
||||||
</Space>
|
</Space>
|
||||||
|
|
||||||
<Space direction="vertical" size={10}>
|
<Space direction="vertical" className="w-full" size={10}>
|
||||||
<Divider orientation="left">输出token详情</Divider>
|
<Divider orientation="left">输出token详情</Divider>
|
||||||
<List
|
<List
|
||||||
bordered
|
bordered
|
||||||
@ -170,8 +182,13 @@ export const ListDetail = () => {
|
|||||||
header={<div>数联网搜索关键词</div>}
|
header={<div>数联网搜索关键词</div>}
|
||||||
renderItem={(item) => (
|
renderItem={(item) => (
|
||||||
<List.Item style={{ justifyContent: "flex-start" }}>
|
<List.Item style={{ justifyContent: "flex-start" }}>
|
||||||
<Typography.Text className="mr-1" style={{ marginBottom: 0 }}>{item.key}</Typography.Text>
|
<Typography.Text className="mr-1" style={{ marginBottom: 0 }}>
|
||||||
<Tooltip style={{ marginBottom: 0 }} placement="topLeft" title={item.value}>
|
{item.key}
|
||||||
|
</Typography.Text>
|
||||||
|
<Tooltip
|
||||||
|
style={{ marginBottom: 0 }}
|
||||||
|
placement="topLeft"
|
||||||
|
title={item.value}>
|
||||||
{item.value}
|
{item.value}
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</List.Item>
|
</List.Item>
|
||||||
|
@ -194,7 +194,7 @@ export const useMessageOption = () => {
|
|||||||
const meter: MeteringEntry = {
|
const meter: MeteringEntry = {
|
||||||
id: generateMessageId,
|
id: generateMessageId,
|
||||||
queryContent: message,
|
queryContent: message,
|
||||||
date: new Date()
|
date: new Date().getTime()
|
||||||
} as MeteringEntry
|
} as MeteringEntry
|
||||||
|
|
||||||
if (!isRegenerate) {
|
if (!isRegenerate) {
|
||||||
@ -489,20 +489,22 @@ export const useMessageOption = () => {
|
|||||||
|
|
||||||
// Save metering entry
|
// Save metering entry
|
||||||
const { cot, content } = responseResolver(fullText)
|
const { cot, content } = responseResolver(fullText)
|
||||||
setMeteringEntries([ {
|
const _meteringEntries = [{
|
||||||
...meter,
|
...meter,
|
||||||
modelInputTokenCount: prompt.length,
|
modelInputTokenCount: prompt.length,
|
||||||
modelOutputTokenCount: fullText.length,
|
modelOutputTokenCount: fullText.length,
|
||||||
model: ollama.modelName,
|
model: ollama.modelName ?? ollama.model,
|
||||||
relatedDataCount: iodData?.length ?? 0,
|
relatedDataCount: iodData?.length ?? 0,
|
||||||
timeTaken: new Date().getTime() - meter.date.getTime(),
|
timeTaken: new Date().getTime() - chatStartTime.getTime(),
|
||||||
date: chatStartTime,
|
date: chatStartTime.getTime(),
|
||||||
cot,
|
cot,
|
||||||
responseContent: content,
|
responseContent: content,
|
||||||
modelResponseContent: fullText,
|
modelResponseContent: fullText,
|
||||||
},
|
},
|
||||||
...meteringEntries,
|
...meteringEntries,
|
||||||
])
|
]
|
||||||
|
setMeteringEntries(_meteringEntries)
|
||||||
|
localStorage.setItem("meteringEntries", JSON.stringify(_meteringEntries))
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
const errorSave = await saveMessageOnError({
|
const errorSave = await saveMessageOnError({
|
||||||
e,
|
e,
|
||||||
|
@ -100,7 +100,7 @@ export type MeteringEntry = {
|
|||||||
// 大模型输出token数量
|
// 大模型输出token数量
|
||||||
modelOutputTokenCount: number
|
modelOutputTokenCount: number
|
||||||
// 日期
|
// 日期
|
||||||
date: Date
|
date: number
|
||||||
// 耗时
|
// 耗时
|
||||||
timeTaken: number
|
timeTaken: number
|
||||||
// 大模型回答的全部内容
|
// 大模型回答的全部内容
|
||||||
@ -120,7 +120,7 @@ export const useStoreMessageOption = create<State>((set) => ({
|
|||||||
setMessages: (messages) => set({ messages }),
|
setMessages: (messages) => set({ messages }),
|
||||||
history: [],
|
history: [],
|
||||||
setHistory: (history) => set({ history }),
|
setHistory: (history) => set({ history }),
|
||||||
meteringEntries: [],
|
meteringEntries: JSON.parse(localStorage.getItem("meteringEntries") || JSON.stringify([])),
|
||||||
setMeteringEntries: (meteringEntries) => set({ meteringEntries }),
|
setMeteringEntries: (meteringEntries) => set({ meteringEntries }),
|
||||||
streaming: false,
|
streaming: false,
|
||||||
setStreaming: (streaming) => set({ streaming }),
|
setStreaming: (streaming) => set({ streaming }),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user