model-trigger.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import type { FC } from 'react'
  2. import { RiArrowDownSLine } from '@remixicon/react'
  3. import type {
  4. Model,
  5. ModelItem,
  6. } from '../declarations'
  7. import {
  8. MODEL_STATUS_TEXT,
  9. ModelStatusEnum,
  10. } from '../declarations'
  11. import { useLanguage } from '../hooks'
  12. import ModelIcon from '../model-icon'
  13. import ModelName from '../model-name'
  14. import { AlertTriangle } from '@/app/components/base/icons/src/vender/line/alertsAndFeedback'
  15. import Tooltip from '@/app/components/base/tooltip'
  16. import cn from '@/utils/classnames'
  17. type ModelTriggerProps = {
  18. open: boolean
  19. provider: Model
  20. model: ModelItem
  21. className?: string
  22. readonly?: boolean
  23. }
  24. const ModelTrigger: FC<ModelTriggerProps> = ({
  25. open,
  26. provider,
  27. model,
  28. className,
  29. readonly,
  30. }) => {
  31. const language = useLanguage()
  32. return (
  33. <div
  34. className={cn(
  35. 'group flex items-center p-1 h-8 gap-0.5 rounded-lg bg-components-input-bg-normal',
  36. !readonly && 'hover:bg-components-input-bg-hover cursor-pointer',
  37. open && 'bg-components-input-bg-hover',
  38. model.status !== ModelStatusEnum.active && 'bg-components-input-bg-disabled hover:bg-components-input-bg-disabled',
  39. className,
  40. )}
  41. >
  42. <ModelIcon
  43. className='p-0.5'
  44. provider={provider}
  45. modelName={model.model}
  46. />
  47. <div className='flex px-1 py-[3px] items-center gap-1 grow truncate'>
  48. <ModelName
  49. className='grow'
  50. modelItem={model}
  51. showMode
  52. showFeatures
  53. />
  54. {!readonly && (
  55. <div className='shrink-0 flex items-center justify-center w-4 h-4'>
  56. {
  57. model.status !== ModelStatusEnum.active
  58. ? (
  59. <Tooltip popupContent={MODEL_STATUS_TEXT[model.status][language]}>
  60. <AlertTriangle className='w-4 h-4 text-text-warning-secondary' />
  61. </Tooltip>
  62. )
  63. : (
  64. <RiArrowDownSLine
  65. className='w-3.5 h-3.5 text-text-tertiary'
  66. />
  67. )
  68. }
  69. </div>
  70. )}
  71. </div>
  72. </div>
  73. )
  74. }
  75. export default ModelTrigger