Spaces:
Running
Running
/** | |
* | |
* Copyright 2023-2025 InspectorRAGet Team | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
* | |
**/ | |
'use client'; | |
import Link from 'next/link'; | |
import { | |
ExpandableTile, | |
TileAboveTheFoldContent, | |
TileBelowTheFoldContent, | |
Tag, | |
DefinitionTooltip, | |
Toggletip, | |
ToggletipButton, | |
ToggletipContent, | |
ToggletipActions, | |
UnorderedList, | |
ListItem, | |
} from '@carbon/react'; | |
import { Microscope, Information } from '@carbon/icons-react'; | |
import { TileData } from '@/src/types'; | |
import { | |
MetricDefinitions, | |
extractMetricDisplayName, | |
} from '@/src/utilities/metrics'; | |
import { calculateDuration } from '@/src/utilities/time'; | |
import styles from './ExampleTile.module.scss'; | |
export default function ExampleTile({ | |
data, | |
disableNavigation = false, | |
expanded = true, | |
}: { | |
data: TileData; | |
disableNavigation?: boolean; | |
expanded?: boolean; | |
}) { | |
const [ | |
durationInDays, | |
durationInHours, | |
durationInMinutes, | |
durationInSeconds, | |
] = calculateDuration(data.endTimestamp, data.startTimestamp); | |
return ( | |
<ExpandableTile expanded={expanded}> | |
<TileAboveTheFoldContent> | |
<div className={styles.heading}> | |
<Microscope className={styles.icon} /> | |
{disableNavigation ? ( | |
<span className={styles.title}>{data.name}</span> | |
) : ( | |
<Link href={`/examples/${data.exampleId}`}> | |
<span className={styles.title}>{data.name}</span> | |
</Link> | |
)} | |
</div> | |
</TileAboveTheFoldContent> | |
<TileBelowTheFoldContent> | |
<div className={styles.block}> | |
<div className={styles.information}> | |
<div className={styles.artifactEvaluations}> | |
<div className={styles.artifactTitle}> | |
<span># of tasks</span> | |
</div> | |
<div className={styles.artifactValue}> | |
<span>{data.numTasks}</span> | |
</div> | |
</div> | |
<div className={styles.artifactAnnotators}> | |
<div className={styles.artifactTitle}> | |
<span># of annotators</span> | |
</div> | |
<div className={styles.artifactValue}> | |
<span>{data.annotators.length}</span> | |
</div> | |
</div> | |
<div className={styles.artifactMetrics}> | |
<div className={styles.artifactHeader}> | |
<div className={styles.artifactTitle}> | |
<span>Metrics</span> | |
</div> | |
<Toggletip> | |
<ToggletipButton label="Additional information"> | |
<Information /> | |
</ToggletipButton> | |
<ToggletipContent> | |
<p>Analytics platform supports three kind of metrics</p> | |
<UnorderedList> | |
<ListItem className={styles.listItem}> | |
Go vs No-Go Rubric | |
</ListItem> | |
<ListItem className={styles.listItem}> | |
Intuitive Rubric | |
</ListItem> | |
<ListItem className={styles.listItem}> | |
Detailed Rubric | |
</ListItem> | |
</UnorderedList> | |
<ToggletipActions> | |
<Link target="_blank" rel="noopener noreferrer" href=""> | |
Reference | |
</Link> | |
</ToggletipActions> | |
</ToggletipContent> | |
</Toggletip> | |
</div> | |
<div className={styles.artifactValue}> | |
{[...data.metrics].map((metric) => { | |
return ( | |
<Tag type={'cool-gray'} key={'metric-' + metric.name}> | |
<DefinitionTooltip | |
definition={ | |
metric.description || MetricDefinitions[metric.name] | |
} | |
align={'bottom'} | |
openOnHover={true} | |
> | |
{extractMetricDisplayName(metric)} | |
</DefinitionTooltip> | |
</Tag> | |
); | |
})} | |
</div> | |
</div> | |
<div className={styles.artifactModels}> | |
<div className={styles.artifactTitle}> | |
<span>Models</span> | |
</div> | |
<div className={styles.artifactValue}> | |
{[...data.models].map((model) => { | |
return ( | |
<Tag type={'cool-gray'} key={'model-' + model.modelId}> | |
{model.name} | |
</Tag> | |
); | |
})} | |
</div> | |
</div> | |
{durationInDays || | |
durationInHours || | |
durationInMinutes || | |
durationInSeconds ? ( | |
<div className={styles.artifactDuration}> | |
<div className={styles.artifactTitle}> | |
<span>Duration</span> | |
</div> | |
<div className={styles.artifactValue}> | |
<span> | |
{durationInDays ? durationInDays + ' days ' : ''} | |
{durationInHours ? durationInHours + ' hours ' : ''} | |
{durationInMinutes ? durationInMinutes + ' mins ' : ''} | |
{durationInSeconds} sec | |
</span> | |
</div> | |
</div> | |
) : null} | |
</div> | |
</div> | |
</TileBelowTheFoldContent> | |
</ExpandableTile> | |
); | |
} | |