|
import type { FC, PropsWithChildren } from 'react' |
|
import { |
|
modelTypeFormat, |
|
sizeFormat, |
|
} from '../utils' |
|
import { useLanguage } from '../hooks' |
|
import type { ModelItem } from '../declarations' |
|
import ModelBadge from '../model-badge' |
|
import FeatureIcon from '../model-selector/feature-icon' |
|
import classNames from '@/utils/classnames' |
|
|
|
type ModelNameProps = PropsWithChildren<{ |
|
modelItem: ModelItem |
|
className?: string |
|
showModelType?: boolean |
|
modelTypeClassName?: string |
|
showMode?: boolean |
|
modeClassName?: string |
|
showFeatures?: boolean |
|
featuresClassName?: string |
|
showContextSize?: boolean |
|
}> |
|
const ModelName: FC<ModelNameProps> = ({ |
|
modelItem, |
|
className, |
|
showModelType, |
|
modelTypeClassName, |
|
showMode, |
|
modeClassName, |
|
showFeatures, |
|
featuresClassName, |
|
showContextSize, |
|
children, |
|
}) => { |
|
const language = useLanguage() |
|
|
|
if (!modelItem) |
|
return null |
|
return ( |
|
<div |
|
className={` |
|
flex items-center truncate text-[13px] font-medium text-gray-800 |
|
${className} |
|
`} |
|
> |
|
<div |
|
className='truncate' |
|
title={modelItem.label[language] || modelItem.label.en_US} |
|
> |
|
{modelItem.label[language] || modelItem.label.en_US} |
|
</div> |
|
{ |
|
showModelType && modelItem.model_type && ( |
|
<ModelBadge className={classNames('ml-1', modelTypeClassName)}> |
|
{modelTypeFormat(modelItem.model_type)} |
|
</ModelBadge> |
|
) |
|
} |
|
{ |
|
modelItem.model_properties.mode && showMode && ( |
|
<ModelBadge className={classNames('ml-1', modeClassName)}> |
|
{(modelItem.model_properties.mode as string).toLocaleUpperCase()} |
|
</ModelBadge> |
|
) |
|
} |
|
{ |
|
showFeatures && modelItem.features?.map(feature => ( |
|
<FeatureIcon |
|
key={feature} |
|
feature={feature} |
|
className={featuresClassName} |
|
/> |
|
)) |
|
} |
|
{ |
|
showContextSize && modelItem.model_properties.context_size && ( |
|
<ModelBadge className='ml-1'> |
|
{sizeFormat(modelItem.model_properties.context_size as number)} |
|
</ModelBadge> |
|
) |
|
} |
|
{children} |
|
</div> |
|
) |
|
} |
|
|
|
export default ModelName |
|
|