File size: 1,755 Bytes
9705b6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import React from 'react';
import {
  AzureMinimalIcon,
  OpenAIMinimalIcon,
  ChatGPTMinimalIcon,
  PluginMinimalIcon,
  BingAIMinimalIcon,
  PaLMinimalIcon,
  AnthropicMinimalIcon,
} from '~/components/svg';
import { cn } from '~/utils';
import { IconProps } from '~/common';

const MinimalIcon: React.FC<IconProps> = (props) => {
  const { size = 30, error } = props;

  let endpoint = 'default'; // Default value for endpoint

  if (typeof props.endpoint === 'string') {
    endpoint = props.endpoint;
  }

  const endpointIcons = {
    azureOpenAI: { icon: <AzureMinimalIcon />, name: props.chatGptLabel || 'ChatGPT' },
    openAI: { icon: <OpenAIMinimalIcon />, name: props.chatGptLabel || 'ChatGPT' },
    gptPlugins: { icon: <PluginMinimalIcon />, name: 'Plugins' },
    google: { icon: <PaLMinimalIcon />, name: props.modelLabel || 'PaLM2' },
    anthropic: { icon: <AnthropicMinimalIcon />, name: props.modelLabel || 'Claude' },
    bingAI: { icon: <BingAIMinimalIcon />, name: 'BingAI' },
    chatGPTBrowser: { icon: <ChatGPTMinimalIcon />, name: 'ChatGPT' },
    default: { icon: <OpenAIMinimalIcon />, name: 'UNKNOWN' },
  };

  const { icon, name } = endpointIcons[endpoint];

  return (
    <div
      data-testid="convo-icon"
      title={name}
      style={{
        width: size,
        height: size,
      }}
      className={cn(
        'relative flex items-center justify-center rounded-sm text-white',
        props.className || '',
      )}
    >
      {icon}
      {error && (
        <span className="absolute right-0 top-[20px] -mr-2 flex h-4 w-4 items-center justify-center rounded-full border border-white bg-red-500 text-[10px] text-white">
          !
        </span>
      )}
    </div>
  );
};

export default MinimalIcon;