| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import EmojiPicker, {
- Emoji,
- EmojiStyle,
- Theme as EmojiTheme,
- } from "emoji-picker-react";
- import { ModelType } from "../store";
- import BotIconDefault from "../icons/llm-icons/default.svg";
- import BotIconOpenAI from "../icons/llm-icons/openai.svg";
- import BotIconGemini from "../icons/llm-icons/gemini.svg";
- import BotIconGemma from "../icons/llm-icons/gemma.svg";
- import BotIconClaude from "../icons/llm-icons/claude.svg";
- import BotIconMeta from "../icons/llm-icons/meta.svg";
- import BotIconMistral from "../icons/llm-icons/mistral.svg";
- import BotIconDeepseek from "../icons/llm-icons/deepseek.svg";
- import BotIconMoonshot from "../icons/llm-icons/moonshot.svg";
- import BotIconQwen from "../icons/llm-icons/qwen.svg";
- import BotIconWenxin from "../icons/llm-icons/wenxin.svg";
- import BotIconGrok from "../icons/llm-icons/grok.svg";
- import BotIconHunyuan from "../icons/llm-icons/hunyuan.svg";
- import BotIconDoubao from "../icons/llm-icons/doubao.svg";
- import BotIconChatglm from "../icons/llm-icons/chatglm.svg";
- export function getEmojiUrl(unified: string, style: EmojiStyle) {
- // Whoever owns this Content Delivery Network (CDN), I am using your CDN to serve emojis
- // Old CDN broken, so I had to switch to this one
- // Author: https://github.com/H0llyW00dzZ
- return `https://fastly.jsdelivr.net/npm/emoji-datasource-apple/img/${style}/64/${unified}.png`;
- }
- export function AvatarPicker(props: {
- onEmojiClick: (emojiId: string) => void;
- }) {
- return (
- <EmojiPicker
- width={"100%"}
- lazyLoadEmojis
- theme={EmojiTheme.AUTO}
- getEmojiUrl={getEmojiUrl}
- onEmojiClick={(e) => {
- props.onEmojiClick(e.unified);
- }}
- />
- );
- }
- export function Avatar(props: { model?: ModelType; avatar?: string }) {
- let LlmIcon = BotIconDefault;
- if (props.model) {
- const modelName = props.model.toLowerCase();
- if (
- modelName.startsWith("gpt") ||
- modelName.startsWith("chatgpt") ||
- modelName.startsWith("o1") ||
- modelName.startsWith("o3")
- ) {
- LlmIcon = BotIconOpenAI;
- } else if (modelName.startsWith("gemini")) {
- LlmIcon = BotIconGemini;
- } else if (modelName.startsWith("gemma")) {
- LlmIcon = BotIconGemma;
- } else if (modelName.startsWith("claude")) {
- LlmIcon = BotIconClaude;
- } else if (modelName.startsWith("llama")) {
- LlmIcon = BotIconMeta;
- } else if (modelName.startsWith("mixtral")) {
- LlmIcon = BotIconMistral;
- } else if (modelName.startsWith("deepseek")) {
- LlmIcon = BotIconDeepseek;
- } else if (modelName.startsWith("moonshot")) {
- LlmIcon = BotIconMoonshot;
- } else if (modelName.startsWith("qwen")) {
- LlmIcon = BotIconQwen;
- } else if (modelName.startsWith("ernie")) {
- LlmIcon = BotIconWenxin;
- } else if (modelName.startsWith("grok")) {
- LlmIcon = BotIconGrok;
- } else if (modelName.startsWith("hunyuan")) {
- LlmIcon = BotIconHunyuan;
- } else if (modelName.startsWith("doubao")) {
- LlmIcon = BotIconDoubao;
- } else if (modelName.startsWith("glm")) {
- LlmIcon = BotIconChatglm;
- }
- return (
- <div className="no-dark">
- <LlmIcon className="user-avatar" width={30} height={30} />
- </div>
- );
- }
- return (
- <div className="user-avatar">
- {props.avatar && <EmojiAvatar avatar={props.avatar} />}
- </div>
- );
- }
- export function EmojiAvatar(props: { avatar: string; size?: number }) {
- return (
- <Emoji
- unified={props.avatar}
- size={props.size ?? 18}
- getEmojiUrl={getEmojiUrl}
- />
- );
- }
|