model-trigger.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import type { FC } from 'react'
  2. import type {
  3. Model,
  4. ModelItem,
  5. } from '../declarations'
  6. import {
  7. MODEL_STATUS_TEXT,
  8. ModelStatusEnum,
  9. } from '../declarations'
  10. import { useLanguage } from '../hooks'
  11. import ModelIcon from '../model-icon'
  12. import ModelName from '../model-name'
  13. import { AlertTriangle } from '@/app/components/base/icons/src/vender/line/alertsAndFeedback'
  14. import { ChevronDown } from '@/app/components/base/icons/src/vender/line/arrows'
  15. import TooltipPlus from '@/app/components/base/tooltip-plus'
  16. type ModelTriggerProps = {
  17. open: boolean
  18. provider: Model
  19. model: ModelItem
  20. className?: string
  21. }
  22. const ModelTrigger: FC<ModelTriggerProps> = ({
  23. open,
  24. provider,
  25. model,
  26. className,
  27. }) => {
  28. const language = useLanguage()
  29. return (
  30. <div
  31. className={`
  32. group flex items-center px-2 h-8 rounded-lg bg-gray-100 hover:bg-gray-200 cursor-pointer
  33. ${className}
  34. ${open && '!bg-gray-200'}
  35. ${model.status !== ModelStatusEnum.active && '!bg-[#FFFAEB]'}
  36. `}
  37. >
  38. <ModelIcon
  39. className='shrink-0 mr-1.5'
  40. provider={provider}
  41. modelName={model.model}
  42. />
  43. <ModelName
  44. className='grow'
  45. modelItem={model}
  46. showMode
  47. showFeatures
  48. />
  49. <div className='shrink-0 flex items-center justify-center w-4 h-4'>
  50. {
  51. model.status !== ModelStatusEnum.active
  52. ? (
  53. <TooltipPlus popupContent={MODEL_STATUS_TEXT[model.status][language]}>
  54. <AlertTriangle className='w-4 h-4 text-[#F79009]' />
  55. </TooltipPlus>
  56. )
  57. : (
  58. <ChevronDown
  59. className='w-3.5 h-3.5 text-gray-500'
  60. />
  61. )
  62. }
  63. </div>
  64. </div>
  65. )
  66. }
  67. export default ModelTrigger