You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.tsx 5.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. import BasicTableInfo, { BasicInfoData } from '@/components/BasicTableInfo';
  2. import SubAreaTitle from '@/components/SubAreaTitle';
  3. import { ResourceInfoTabKeys } from '@/pages/Dataset/components/ResourceInfo';
  4. import {
  5. DataSource,
  6. DatasetData,
  7. ModelData,
  8. ProjectDependency,
  9. ResourceType,
  10. TrainTask,
  11. resourceConfig,
  12. } from '@/pages/Dataset/config';
  13. import ModelMetrics from '@/pages/Model/components/ModelMetrics';
  14. import { getGitUrl } from '@/utils';
  15. import styles from './index.less';
  16. type ResourceIntroProps = {
  17. resourceType: ResourceType;
  18. info: DatasetData | ModelData;
  19. resourceId: number;
  20. identifier: string;
  21. owner: string;
  22. version?: string;
  23. };
  24. const formatDataset = (datasets?: DatasetData[]) => {
  25. if (!datasets || datasets.length === 0) {
  26. return undefined;
  27. }
  28. return datasets.map((item) => ({
  29. value: item.name,
  30. url: `${origin}/dataset/dataset/info/${item.id}?tab=${ResourceInfoTabKeys.Version}&version=${item.version}&name=${item.name}&owner=${item.owner}&identifier=${item.identifier}`,
  31. }));
  32. };
  33. const getProjectUrl = (project?: ProjectDependency) => {
  34. if (!project || !project.url || !project.branch) {
  35. return undefined;
  36. }
  37. const { url, branch } = project;
  38. return getGitUrl(url, branch);
  39. };
  40. const formatProject = (project?: ProjectDependency) => {
  41. if (!project) {
  42. return undefined;
  43. }
  44. return {
  45. value: project.name,
  46. url: getProjectUrl(project),
  47. };
  48. };
  49. const formatTrainTask = (task?: TrainTask) => {
  50. if (!task) {
  51. return undefined;
  52. }
  53. return {
  54. value: task.name,
  55. url: `${origin}/pipeline/experiment/instance/${task.workflow_id}/${task.ins_id}`,
  56. };
  57. };
  58. const formatSource = (source?: string) => {
  59. if (source === DataSource.Create) {
  60. return '用户上传';
  61. } else if (source === DataSource.HandExport) {
  62. return '手动导入';
  63. } else if (source === DataSource.AtuoExport) {
  64. return '实验自动导入';
  65. }
  66. return source;
  67. };
  68. const getDatasetDatas = (data: DatasetData): BasicInfoData[] => [
  69. {
  70. label: '数据集名称',
  71. value: data.name,
  72. ellipsis: true,
  73. },
  74. {
  75. label: '版本',
  76. value: data.version,
  77. ellipsis: true,
  78. },
  79. {
  80. label: '创建人',
  81. value: data.create_by,
  82. ellipsis: true,
  83. },
  84. {
  85. label: '更新时间',
  86. value: data.update_time,
  87. ellipsis: true,
  88. },
  89. {
  90. label: '数据来源',
  91. value: data.dataset_source,
  92. format: formatSource,
  93. ellipsis: true,
  94. },
  95. {
  96. label: '训练任务',
  97. value: data.train_task,
  98. format: formatTrainTask,
  99. ellipsis: true,
  100. },
  101. {
  102. label: '处理代码',
  103. value: data.processing_code,
  104. format: formatProject,
  105. ellipsis: true,
  106. },
  107. {
  108. label: '数据集分类',
  109. value: data.data_type,
  110. ellipsis: true,
  111. },
  112. {
  113. label: '研究方向',
  114. value: data.data_tag,
  115. ellipsis: true,
  116. },
  117. ];
  118. const getModelDatas = (data: ModelData): BasicInfoData[] => [
  119. {
  120. label: '模型名称',
  121. value: data.name,
  122. ellipsis: true,
  123. },
  124. {
  125. label: '版本',
  126. value: data.version,
  127. ellipsis: true,
  128. },
  129. {
  130. label: '创建人',
  131. value: data.create_by,
  132. ellipsis: true,
  133. },
  134. {
  135. label: '更新时间',
  136. value: data.update_time,
  137. ellipsis: true,
  138. },
  139. {
  140. label: '训练镜像',
  141. value: data.image,
  142. ellipsis: true,
  143. },
  144. {
  145. label: '训练代码',
  146. value: data.project_depency,
  147. format: formatProject,
  148. ellipsis: true,
  149. },
  150. {
  151. label: '训练数据集',
  152. value: data.train_datasets,
  153. format: formatDataset,
  154. ellipsis: true,
  155. },
  156. {
  157. label: '测试数据集',
  158. value: data.test_datasets,
  159. format: formatDataset,
  160. ellipsis: true,
  161. },
  162. {
  163. label: '模型来源',
  164. value: data.model_source,
  165. format: formatSource,
  166. ellipsis: true,
  167. },
  168. {
  169. label: '训练任务',
  170. value: data.train_task,
  171. format: formatTrainTask,
  172. ellipsis: true,
  173. },
  174. {
  175. label: '模型框架',
  176. value: data.model_type,
  177. ellipsis: true,
  178. },
  179. {
  180. label: '模型能力',
  181. value: data.model_tag,
  182. ellipsis: true,
  183. },
  184. ];
  185. function ResourceIntro({
  186. resourceType,
  187. info,
  188. resourceId,
  189. identifier,
  190. owner,
  191. version,
  192. }: ResourceIntroProps) {
  193. const config = resourceConfig[resourceType];
  194. const basicDatas: BasicInfoData[] =
  195. resourceType === ResourceType.Dataset
  196. ? getDatasetDatas(info as DatasetData)
  197. : getModelDatas(info as ModelData);
  198. return (
  199. <div className={styles['resource-intro']}>
  200. <div className={styles['resource-intro__top']}>
  201. <SubAreaTitle
  202. title="基本信息"
  203. image={require('@/assets/img/mirror-basic.png')}
  204. style={{ marginBottom: '15px' }}
  205. ></SubAreaTitle>
  206. <div className={styles['resource-intro__top__basic']}>
  207. <BasicTableInfo datas={basicDatas} labelWidth={135}></BasicTableInfo>
  208. </div>
  209. <div className={styles['resource-intro__top__title']}>{`${config.name}描述`}</div>
  210. <div className={styles['resource-intro__top__desc']}>{info.description ?? '暂无描述'}</div>
  211. <div className={styles['resource-intro__top__title']}>版本描述</div>
  212. <div className={styles['resource-intro__top__desc']}>{info.version_desc ?? '暂无描述'}</div>
  213. <SubAreaTitle
  214. title="实例用法"
  215. image={require('@/assets/img/usage-icon.png')}
  216. style={{ margin: '25px 0 15px' }}
  217. ></SubAreaTitle>
  218. <div
  219. className={styles['resource-intro__top__usage']}
  220. dangerouslySetInnerHTML={{ __html: info.usage ?? '暂无实例用法' }}
  221. ></div>
  222. </div>
  223. {resourceType === ResourceType.Model && version && (
  224. <ModelMetrics
  225. resourceId={resourceId}
  226. identifier={identifier}
  227. owner={owner}
  228. version={version}
  229. ></ModelMetrics>
  230. )}
  231. </div>
  232. );
  233. }
  234. export default ResourceIntro;