AiModelLogList.tsx 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import { ProList } from "@ant-design/pro-components";
  2. import { Space, Tabs, Tag, Typography } from "antd";
  3. import type { Key } from "react";
  4. import { useState } from "react";
  5. import { CheckOutlined, WarningOutlined } from "@ant-design/icons";
  6. import type { IAiModelLogData, IAiModelLogListResponse } from "../../api/ai";
  7. import { get } from "../../request";
  8. import moment from "moment";
  9. const { Text } = Typography;
  10. interface IWidget {
  11. modelId?: string;
  12. }
  13. const AiModelLogList = ({ modelId }: IWidget) => {
  14. const [expandedRowKeys, setExpandedRowKeys] = useState<readonly Key[]>([]);
  15. return (
  16. <ProList<IAiModelLogData>
  17. rowKey="title"
  18. headerTitle="logs"
  19. expandable={{ expandedRowKeys, onExpandedRowsChange: setExpandedRowKeys }}
  20. metas={{
  21. title: {},
  22. subTitle: {
  23. render: (_dom, entity, _index, _action, _schema) => {
  24. return (
  25. <Space size={0}>
  26. <Tag color="blue">{entity.status}</Tag>
  27. </Space>
  28. );
  29. },
  30. },
  31. description: {
  32. render: (_dom, entity, _index, _action, _schema) => {
  33. const jsonView = (text?: string | null) => {
  34. return (
  35. <div>
  36. <pre>
  37. {text ? JSON.stringify(JSON.parse(text), null, 2) : ""}
  38. </pre>
  39. </div>
  40. );
  41. };
  42. const info = (headers: string, data: string) => {
  43. return (
  44. <div>
  45. <Text strong>Headers</Text>
  46. <div
  47. style={{
  48. backgroundColor: "rgb(246, 248, 250)",
  49. border: "1px solid gray",
  50. padding: 6,
  51. }}
  52. >
  53. {jsonView(headers)}
  54. </div>
  55. <Text strong>Payload</Text>
  56. <div
  57. style={{
  58. backgroundColor: "rgb(246, 248, 250)",
  59. border: "1px solid gray",
  60. padding: 6,
  61. }}
  62. >
  63. {jsonView(data)}
  64. </div>
  65. </div>
  66. );
  67. };
  68. return (
  69. <>
  70. <Tabs
  71. items={[
  72. {
  73. label: "request",
  74. key: "request",
  75. children: (
  76. <div>
  77. {info(entity.request_headers, entity.request_data)}
  78. </div>
  79. ),
  80. },
  81. {
  82. label: "response",
  83. key: "response",
  84. children: (
  85. <div>
  86. {info(
  87. entity.response_headers ?? "",
  88. entity.response_data ?? ""
  89. )}
  90. </div>
  91. ),
  92. },
  93. ]}
  94. />
  95. </>
  96. );
  97. },
  98. },
  99. avatar: {
  100. render(_dom, entity, _index, _action, _schema) {
  101. return (
  102. <>
  103. {entity.success ? (
  104. <CheckOutlined style={{ color: "green" }} />
  105. ) : (
  106. <WarningOutlined color="error" />
  107. )}
  108. </>
  109. );
  110. },
  111. },
  112. actions: {
  113. render: (_dom, entity, _index, _action, _schema) => {
  114. const date = moment(entity.created_at).toLocaleString();
  115. return <Text type="secondary">{date}</Text>;
  116. },
  117. },
  118. }}
  119. bordered
  120. pagination={{
  121. showQuickJumper: true,
  122. showSizeChanger: true,
  123. pageSize: 20,
  124. }}
  125. search={false}
  126. options={{
  127. search: true,
  128. }}
  129. request={async (params = {}, sorter, filter) => {
  130. console.log(params, sorter, filter);
  131. let url = `/v2/model-log?view=model&id=${modelId}`;
  132. const offset = ((params.current ?? 1) - 1) * (params.pageSize ?? 20);
  133. url += `&limit=${params.pageSize}&offset=${offset}`;
  134. url += params.keyword ? "&search=" + params.keyword : "";
  135. console.info("ai model log api request", url);
  136. const res = await get<IAiModelLogListResponse>(url);
  137. console.info("ai model log api response", res);
  138. return {
  139. total: res.data.total,
  140. succcess: res.ok,
  141. data: res.data.rows,
  142. };
  143. }}
  144. />
  145. );
  146. };
  147. export default AiModelLogList;