From 4f4a0a8679ee9bd5e8d0b911f7b92090ee9ac6de Mon Sep 17 00:00:00 2001 From: carrythemountain Date: Fri, 31 May 2024 14:43:21 -0500 Subject: [PATCH] Task/t UI 367 single model info and button placements (#377) * create ModelDetails * add author, downloads, created_at, last_modified, library_name to ModelDetails. * fix routers in Models, fix routers and layouts in ML Hub. * fix ModelDetails to reflect ModelFullInfo. fix ModelDetails.Module to add styling. Fix ModelDetails to add buttons. * Update basePath to original. * Remove json import from ModelDetails. Remove old button-container from ModelDetailsModule. * ran prettier. --- .../MlHub/Models/ModelDetails.module.scss | 48 +++++++ src/tapis-app/MlHub/Models/ModelDetails.tsx | 125 ++++++++++++++++++ src/tapis-app/MlHub/Models/Models.tsx | 5 +- src/tapis-app/MlHub/Models/_Router/Router.tsx | 24 +++- src/tapis-app/MlHub/Models/index.ts | 1 + src/tapis-app/MlHub/_Router/Router.tsx | 4 +- 6 files changed, 199 insertions(+), 8 deletions(-) create mode 100644 src/tapis-app/MlHub/Models/ModelDetails.module.scss create mode 100644 src/tapis-app/MlHub/Models/ModelDetails.tsx diff --git a/src/tapis-app/MlHub/Models/ModelDetails.module.scss b/src/tapis-app/MlHub/Models/ModelDetails.module.scss new file mode 100644 index 000000000..287b2bbf3 --- /dev/null +++ b/src/tapis-app/MlHub/Models/ModelDetails.module.scss @@ -0,0 +1,48 @@ +.buttons-container { + display: flex; + flex-direction: column; + position: absolute; + top: 0px; + right: 0px; + gap: 20px; +} + +.model-details-wrapper { + display: flex; + flex-direction: row; + width: 100%; + position: relative; +} + +.model-details { + margin-left: 10px; + display: flex; + flex-direction: column; + gap: 16px; + flex: 1; +} + +.model-title { + padding-bottom: 8px; + margin-left: 10px; +} + +.model-detail { + display: flex; + flex-direction: row; +} + +.detail-title { + font-weight: bold; + width: 10vw; +} + +.detail-info { + margin-left: 8px; + text-align: left; +} + +.model-title-container { + border-bottom: 1px solid black; + margin-bottom: 8px; +} diff --git a/src/tapis-app/MlHub/Models/ModelDetails.tsx b/src/tapis-app/MlHub/Models/ModelDetails.tsx new file mode 100644 index 000000000..df1560403 --- /dev/null +++ b/src/tapis-app/MlHub/Models/ModelDetails.tsx @@ -0,0 +1,125 @@ +import React from 'react'; +import { Models } from '@tapis/tapis-typescript'; +import { useDetails } from 'tapis-hooks/ml-hub/models'; +import { QueryWrapper } from 'tapis-ui/_wrappers'; +import { Button } from 'reactstrap'; +import styles from './ModelDetails.module.scss'; +import { Icon } from 'tapis-ui/_common'; +import { JSONDisplay } from 'tapis-ui/_common'; + +type ModelsProps = { + modelId: string; +}; + +type ButtonNames = { + InferenceServerDetails: String; + ModelCard: String; + DownloadModel: String; +}; + +const ModelDetails: React.FC = ({ modelId }) => { + const { data, isLoading, error } = useDetails({ modelId }); + const model: Models.ModelFullInfo = data?.result ?? {}; + return ( + +
+
+ {modelId} +
+
+
+
+
+
author:
+
{model.author}
+
+
+
downloads:
+
{model.downloads}
+
+
+
created_at:
+
{model.created_at}
+
+
+
last_modified:
+
+ {model.last_modified} +
+
+
+
sha:
+
{model.sha}
+
+
+
+ repository_content: +
+
+ +
+
+
+
library_name:
+
+ {model.library_name} +
+
+
+
+ transformers_info: +
+
+ +
+
+
+
config:
+
+ +
+
+
+ +
+
+ ); +}; + +const Buttons: React.FC = ({ + InferenceServerDetails, + ModelCard, + DownloadModel, +}) => { + return ( +
+ + + +
+ ); +}; + +export default ModelDetails; diff --git a/src/tapis-app/MlHub/Models/Models.tsx b/src/tapis-app/MlHub/Models/Models.tsx index f8184e818..91d1cad33 100644 --- a/src/tapis-app/MlHub/Models/Models.tsx +++ b/src/tapis-app/MlHub/Models/Models.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { Link } from 'react-router-dom'; +import { Link, useRouteMatch } from 'react-router-dom'; import { Models as ModelsModule } from '@tapis/tapis-typescript'; import { useList } from 'tapis-hooks/ml-hub/models'; import { Icon } from 'tapis-ui/_common'; @@ -10,6 +10,7 @@ import styles from './Models.module.scss'; const Models: React.FC = () => { const { data, isLoading, error } = useList(); const models: ModelsModule.ModelShortInfo = data?.result ?? {}; + const { path } = useRouteMatch(); return ( @@ -28,7 +29,7 @@ const Models: React.FC = () => { - {model[0]} + {model[0]} diff --git a/src/tapis-app/MlHub/Models/_Router/Router.tsx b/src/tapis-app/MlHub/Models/_Router/Router.tsx index 685f0c785..499632d96 100644 --- a/src/tapis-app/MlHub/Models/_Router/Router.tsx +++ b/src/tapis-app/MlHub/Models/_Router/Router.tsx @@ -1,15 +1,31 @@ import React from 'react'; -import { Route, useRouteMatch, Switch } from 'react-router-dom'; - -import { default as Models } from '../Models'; +import { + Route, + useRouteMatch, + Switch, + RouteComponentProps, +} from 'react-router-dom'; +import { Models } from '../../Models'; +import ModelDetails from '../ModelDetails'; const Router: React.FC = () => { const { path } = useRouteMatch(); return ( - + + + ) => { + return ; + }} + /> ); }; diff --git a/src/tapis-app/MlHub/Models/index.ts b/src/tapis-app/MlHub/Models/index.ts index 450259390..c64ac4dd4 100644 --- a/src/tapis-app/MlHub/Models/index.ts +++ b/src/tapis-app/MlHub/Models/index.ts @@ -1 +1,2 @@ export { default as Models } from './Models'; +export { default as ModelDetails } from './ModelDetails'; diff --git a/src/tapis-app/MlHub/_Router/Router.tsx b/src/tapis-app/MlHub/_Router/Router.tsx index 368c226d1..b7051ef75 100644 --- a/src/tapis-app/MlHub/_Router/Router.tsx +++ b/src/tapis-app/MlHub/_Router/Router.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Route, useRouteMatch, Switch } from 'react-router-dom'; import { Dashboard } from '../Dashboard'; -import { Models } from '../Models'; +import { Layout as ModelsLayout } from '../Models/_Layout'; const Router: React.FC = () => { const { path } = useRouteMatch(); @@ -12,7 +12,7 @@ const Router: React.FC = () => { - + );