index.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import type { FC } from 'react'
  2. import {
  3. modelTypeFormat,
  4. sizeFormat,
  5. } from '../utils'
  6. import { useLanguage } from '../hooks'
  7. import type { ModelItem } from '../declarations'
  8. import ModelBadge from '../model-badge'
  9. import FeatureIcon from '../model-selector/feature-icon'
  10. type ModelNameProps = {
  11. modelItem: ModelItem
  12. className?: string
  13. showModelType?: boolean
  14. modelTypeClassName?: string
  15. showMode?: boolean
  16. modeClassName?: string
  17. showFeatures?: boolean
  18. featuresClassName?: string
  19. showContextSize?: boolean
  20. }
  21. const ModelName: FC<ModelNameProps> = ({
  22. modelItem,
  23. className,
  24. showModelType,
  25. modelTypeClassName,
  26. showMode,
  27. modeClassName,
  28. showFeatures,
  29. featuresClassName,
  30. showContextSize,
  31. }) => {
  32. const language = useLanguage()
  33. if (!modelItem)
  34. return null
  35. return (
  36. <div
  37. className={`
  38. flex items-center truncate text-[13px] font-medium text-gray-800
  39. ${className}
  40. `}
  41. >
  42. <div
  43. className='mr-1 truncate'
  44. title={modelItem.label[language] || modelItem.label.en_US}
  45. >
  46. {modelItem.label[language] || modelItem.label.en_US}
  47. </div>
  48. {
  49. showModelType && modelItem.model_type && (
  50. <ModelBadge className={`mr-0.5 ${modelTypeClassName}`}>
  51. {modelTypeFormat(modelItem.model_type)}
  52. </ModelBadge>
  53. )
  54. }
  55. {
  56. modelItem.model_properties.mode && showMode && (
  57. <ModelBadge className={`mr-0.5 ${modeClassName}`}>
  58. {(modelItem.model_properties.mode as string).toLocaleUpperCase()}
  59. </ModelBadge>
  60. )
  61. }
  62. {
  63. showFeatures && modelItem.features?.map(feature => (
  64. <FeatureIcon
  65. key={feature}
  66. feature={feature}
  67. className={featuresClassName}
  68. />
  69. ))
  70. }
  71. {
  72. showContextSize && modelItem.model_properties.context_size && (
  73. <ModelBadge>
  74. {sizeFormat(modelItem.model_properties.context_size as number)}
  75. </ModelBadge>
  76. )
  77. }
  78. </div>
  79. )
  80. }
  81. export default ModelName