export type LobeModelAvatarAsset = 'color' | 'mono' export interface LobeModelAvatarConfig { asset: LobeModelAvatarAsset background: string color: string multiple: number } export interface LobeModelIconMapping { keywords: string[] openAIType?: 'gpt3' | 'gpt4' | 'gpt5' | 'o1' | 'oss' | 'platform' slug: string } const avatar = ( background: string, color: string, multiple: number, asset: LobeModelAvatarAsset = 'mono', ): LobeModelAvatarConfig => ({ asset, background, color, multiple }) export const lobeModelAvatarBrands: Record = { ace: avatar('#000', '#fff', 0.65), adobe: avatar('#EB1000', '#fff', 0.6), ai2: avatar('#f0529c', '#fff', 0.7), ai21: avatar('#E91E63', '#fff', 0.7), ai360: avatar('linear-gradient(to bottom, #12B7FA, #006ffb)', '#fff', 0.75), aihubmix: avatar('#006FFB', '#fff', 0.75), aimass: avatar('#fff', '#fff', 0.8, 'color'), aionlabs: avatar('#fff', '#0f172a', 0.8), anthropic: avatar('#F1F0E8', '#141413', 0.75), arcee: avatar('#008C8C', '#fff', 0.7), assemblyai: avatar('#2545D3', '#fff', 0.6), aws: avatar('#222F3E', '#fff', 0.75, 'color'), aya: avatar('#416FDC', '#fff', 0.6), baai: avatar('#000', '#fff', 0.6), baichuan: avatar('#FF6933', '#fff', 0.6), baiducloud: avatar('#2468f2', '#fff', 0.75), bilibili: avatar('#FB7299', '#fff', 0.65), bilibiliindex: avatar('#5E19B7', '#fff', 0.7), burncloud: avatar('#E95513', '#fff', 0.75), bytedance: avatar('#325AB4', '#fff', 0.6), chatglm: avatar('#4268FA', '#fff', 0.75), claude: avatar('#D97757', '#fff', 0.75), codegeex: avatar('#00e7e7', '#000', 0.75), cogview: avatar('#000', '#fff', 0.6, 'color'), cohere: avatar('#39594D', '#fff', 0.6), dalle: avatar( 'conic-gradient(from 180deg, #FFFF67, #43FFFF, #50DA4C, #FF6E3D, #3C46FF)', '#fff', 0.6, ), dbrx: avatar('#EE3D2C', '#fff', 0.6), deepcogito: avatar('#4e81ee', '#fff', 0.7), deepmind: avatar('#4285F4', '#fff', 0.75), deepseek: avatar('#4D6BFE', '#fff', 0.75), dolphin: avatar('#6186db', '#fff', 0.75), doubao: avatar('#FFF', '#fff', 0.75, 'color'), essentialai: avatar('linear-gradient(135deg, #5E38A5, #31018C 63%)', '#fff', 0.7), fireworks: avatar('#5019C5', '#000', 0.75), fishaudio: avatar('#fff', '#000', 0.75), flux: avatar('#fff', '#000', 0.7), glmv: avatar('#0039C6', '#fff', 0.7), gemini: avatar('#fff', '#fff', 0.8, 'color'), gemma: avatar('linear-gradient(45deg, #446EFF 14%, #2E96FF 40%, #B1C5FF 73%)', '#fff', 1), google: avatar('#fff', '#fff', 0.75, 'color'), grok: avatar('#000', '#fff', 0.75), hunyuan: avatar('#0053e0', '#fff', 0.75), ibm: avatar('#0F62FE', '#fff', 0.75), ideogram: avatar('#fff', '#000', 0.75), inception: avatar('#fff', '#000', 0.8), inflection: avatar('#038247', '#fff', 0.6), internlm: avatar('#1B3882', '#fff', 0.75), jimeng: avatar('#000', '#fff', 0.6, 'color'), jina: avatar('#000', '#fff', 0.6), kling: avatar('#000', '#fff', 0.75, 'color'), kolors: avatar('radial-gradient(#CBFF00,#7EF426)', '#fff', 0.75), kwaipilot: avatar('#000', '#fff', 0.8, 'color'), lg: avatar('#C00C3F', '#FFF', 1), llava: avatar('#CB2D30', '#fff', 0.6), liquid: avatar('#fff', '#000', 0.75), longcat: avatar('#fff', '#000', 0.7, 'color'), menlo: avatar('#FF5C00', '#fff', 0.6), meta: avatar('linear-gradient(45deg, #007FF8, #0668E1, #007FF8)', '#fff', 0.75), microsoft: avatar('#00A4EF', '#fff', 0.6), minimax: avatar('linear-gradient(to right, #E2167E, #FE603C)', '#fff', 0.75), mistral: avatar('#FA520F', '#fff', 0.75), moonshot: avatar('#16191E', '#fff', 0.75), morph: avatar('#000', '#99d52a', 0.7), nanobanana: avatar('#FCD53F', '#fff', 0.8), nousresearch: avatar('#fff', '#000', 0.75), nova: avatar('linear-gradient(-45deg, #ff6200, #e433ff 39.9%, #6842ff 96%)', '#fff', 0.7), nvidia: avatar('#74B71B', '#fff', 0.75), openai: avatar('#000', '#fff', 0.75), openchat: avatar('#4A7FE3', '#fff', 0.6), openrouter: avatar('#000', '#C8FF00', 0.75), palm: avatar('#FFF', '#fff', 0.75, 'color'), perplexity: avatar('#22B8CD', '#000', 0.75), phind: avatar('#000', '#fff', 0.6), qiniu: avatar('#06AEEF', '#fff', 0.75), qwen: avatar('#615ced', '#fff', 0.75), relace: avatar('#000', '#fff', 0.66), rwkv: avatar('#3431C3', '#fff', 0.6), sensenova: avatar('#5B2AD8', '#fff', 0.7), skywork: avatar('#fff', '#000', 0.75, 'color'), sora: avatar('linear-gradient(180deg, #012659 0%, #0968DA 100%)', '#fff', 0.7), spark: avatar('#0070f0', '#fff', 0.75), stability: avatar('linear-gradient(to bottom, #9D39FF, #A380FF)', '#fff', 0.7), stepfun: avatar('#fff', '#000', 0.65), suno: avatar('#000', '#fff', 0.6), tii: avatar('#6400FF', '#fff', 0.75), udio: avatar('#e30a5d', '#fff', 0.6), upstage: avatar('linear-gradient(to bottom, #AEBCFE, #805DFA)', '#fff', 0.6), v0: avatar('#000', '#fff', 0.75), vertexai: avatar('#4285F4', '#fff', 0.6), voyage: avatar('#012E33', '#fff', 0.6), wenxin: avatar('linear-gradient(to right, #0A51C3, #23A4FB)', '#fff', 0.75), xiaomimimo: avatar('#000', '#fff', 0.7), yi: avatar('#003425', '#fff', 0.6, 'color'), zai: avatar('#000', '#fff', 0.6), } export const lobeModelIconMappings: LobeModelIconMapping[] = [ { slug: 'openai', keywords: ['gpt-3'], openAIType: 'gpt3' }, { slug: 'openai', keywords: ['gpt-4'], openAIType: 'gpt4' }, { slug: 'openai', keywords: ['gpt-5'], openAIType: 'gpt5' }, { slug: 'sora', keywords: ['sora'] }, { slug: 'openai', keywords: ['gpt-oss'], openAIType: 'oss' }, { slug: 'openai', keywords: ['o1-', '^o1', '/o1', 'o3-', '^o3', '/o3', 'o4-', '^o4', '/o4'], openAIType: 'o1', }, { slug: 'dalle', keywords: ['dalle', 'dall-e'] }, { slug: 'openai', keywords: [ 'text-embedding-', 'tts-', 'whisper-', 'codex', 'davinci', 'babbage', 'omni-moderation', 'text-moderation', 'text-adb', 'text-ada', 'computer-use', ], openAIType: 'platform', }, { slug: 'openai', keywords: ['^gpt-', '/gpt-', 'openai'] }, { slug: 'glmv', keywords: ['^glm-(.*)v', '/glm-(.*)v', '-glm-(.*)v'] }, { slug: 'zai', keywords: ['^glm-5', '/glm-5', '/glm5', '-glm-4', '^glm-4', '/glm-4', '/glm4', '-glm-5'], }, { slug: 'chatglm', keywords: ['^glm-', '/glm-', 'chatglm', '-glm-'] }, { slug: 'codegeex', keywords: ['^codegeex', '/codegeex'] }, { slug: 'claude', keywords: ['claude'] }, { slug: 'anthropic', keywords: ['anthropic'] }, { slug: 'aws', keywords: ['titan'] }, { slug: 'fireworks', keywords: ['accounts/fireworks/models/fire'] }, { slug: 'internlm', keywords: ['internlm', 'internvl'] }, { slug: 'nousresearch', keywords: ['deephermes', 'hermes', 'genstruct', 'minos'] }, { slug: 'nvidia', keywords: ['nemotron', 'openreasoning', 'nemoretriever', 'neva-', 'nv-'] }, { slug: 'meta', keywords: ['llama', '/l3'] }, { slug: 'llava', keywords: ['llava'] }, { slug: 'nanobanana', keywords: [ 'gemini-3.1-flash-image-preview', 'gemini-3-pro-image-preview', 'gemini-\\d+(?:\\.\\d+)?-(?:flash(?:-lite)?|pro)-image(?:-preview)?(?::|$)', 'nanobanana', 'nano-banana', ], }, { slug: 'gemini', keywords: ['gemini'] }, { slug: 'deepmind', keywords: ['^imagen-', '/imagen-', '^imagen\\d/', '/imagen\\d'] }, { slug: 'gemma', keywords: ['gemma'] }, { slug: 'moonshot', keywords: ['kimi', 'moonshot'] }, { slug: 'qiniu', keywords: ['qiniu'] }, { slug: 'qwen', keywords: ['qwen', 'qwq', 'qvq', 'wanx', 'wan\\d/', 'wan\\d\\.\\d-', 'tongyi', 'gte-rerank'], }, { slug: 'minimax', keywords: ['minimax', 'abab', '^image-'] }, { slug: 'mistral', keywords: [ 'mistral', 'mixtral', 'codestral', 'mathstral', '/mn-', 'pixtral', 'ministral', 'magistral', 'devstral', 'voxtral', ], }, { slug: 'perplexity', keywords: ['pplx', 'sonar'] }, { slug: 'yi', keywords: ['^yi-', '/yi-', '-yi-'] }, { slug: 'openrouter', keywords: ['^openrouter'] }, { slug: 'relace', keywords: ['^relace-', '/relace-'] }, { slug: 'arcee', keywords: [ '^trinity-', '/trinity-', 'afm-4.5b', 'caller-large', 'spotlight', 'maestro-reasoning', 'virtuoso-medium-v2', 'virtuoso-large', 'coder-large', 'arcee-blitz', ], }, { slug: 'essentialai', keywords: ['^rnj-', '/rnj-'] }, { slug: 'deepcogito', keywords: ['^deepcogito-', '/deepcogito-', '^cogito-', '/cogito-'] }, { slug: 'morph', keywords: ['^morph-', '/morph-'] }, { slug: 'ai2', keywords: ['^olmo-', '/olmo-'] }, { slug: 'inception', keywords: ['^mercury', '/mercury'] }, { slug: 'openchat', keywords: ['^openchat'] }, { slug: 'aya', keywords: ['aya'] }, { slug: 'cohere', keywords: ['command'] }, { slug: 'dbrx', keywords: ['dbrx'] }, { slug: 'stepfun', keywords: ['step'] }, { slug: 'aimass', keywords: ['taichu'] }, { slug: 'ai360', keywords: ['360gpt', '360zhinao'] }, { slug: 'baichuan', keywords: ['baichuan'] }, { slug: 'rwkv', keywords: ['rwkv', '/eagle-'] }, { slug: 'wenxin', keywords: ['ernie', 'irag'] }, { slug: 'jina', keywords: ['^jina', '/jina'] }, { slug: 'jimeng', keywords: ['^jimeng-', '/jimeng-', 'seedream', 'seededit', 'seedance-'] }, { slug: 'doubao', keywords: ['^ep-', 'doubao-'] }, { slug: 'kling', keywords: ['^kling', 'kling-', 'klingai'] }, { slug: 'hunyuan', keywords: ['hunyuan'] }, { slug: 'fishaudio', keywords: ['^d_', '^g_', '^wd_'] }, { slug: 'bytedance', keywords: ['skylark', 'seed-', 'bytedance'] }, { slug: 'burncloud', keywords: ['burncloud'] }, { slug: 'stability', keywords: [ 'stable-diffusion', 'stable-video', 'stable-cascade', 'sdxl', 'stablelm', '^stable-', '^sd3', '^sd2', '^sd1', ], }, { slug: 'flux', keywords: ['flux'] }, { slug: 'suno', keywords: ['suno'] }, { slug: 'microsoft', keywords: ['wizardlm', '/phi-', '^phi-', '-phi-', 'mai-', 'microsoft'] }, { slug: 'adobe', keywords: ['firefly'] }, { slug: 'ai21', keywords: ['jamba', '^j2-', 'ai21'] }, { slug: 'upstage', keywords: ['^solar-', '/solar'] }, { slug: 'palm', keywords: ['palm'] }, { slug: 'sensenova', keywords: ['SenseChat', 'SenseNova'] }, { slug: 'grok', keywords: ['^grok-', '/grok-'] }, { slug: 'ideogram', keywords: ['ideogram', '^v_1', '^v_2', '^v3$', '^upscale$', '^describe$'] }, { slug: 'spark', keywords: [ 'spark', 'general$', 'generalv3$', 'generalv3.5$', '4.0ultra$', 'pro-128k$', '^max-32k$', '^lite$', '^x1$', ], }, { slug: 'udio', keywords: ['udio'] }, { slug: 'deepseek', keywords: ['deepseek'] }, { slug: 'voyage', keywords: ['voyage'] }, { slug: 'assemblyai', keywords: ['assemblyai'] }, { slug: 'liquid', keywords: ['liquid', 'lfm'] }, { slug: 'inflection', keywords: ['inflection-'] }, { slug: 'aionlabs', keywords: ['aion-'] }, { slug: 'aihubmix', keywords: ['aihubmix'] }, { slug: 'v0', keywords: ['^v0-'] }, { slug: 'vertexai', keywords: ['^veo-', '/veo-', '^veo3'] }, { slug: 'google', keywords: ['google', 'learnlm', 'nano-banana'] }, { slug: 'cogview', keywords: ['cogview'] }, { slug: 'kolors', keywords: ['kolors'] }, { slug: 'baiducloud', keywords: ['baidu', 'qianfan'] }, { slug: 'phind', keywords: ['phind'] }, { slug: 'dolphin', keywords: ['dolphin'] }, { slug: 'ibm', keywords: ['ibm', 'granite'] }, { slug: 'skywork', keywords: ['skywork'] }, { slug: 'bilibiliindex', keywords: ['bilibili-index', 'index-tts'] }, { slug: 'bilibili', keywords: ['bilibili'] }, { slug: 'lg', keywords: ['kmmlu', 'exaone', 'lgai'] }, { slug: 'tii', keywords: ['falcon'] }, { slug: 'menlo', keywords: ['menlo', 'lucy', 'jan-nano'] }, { slug: 'longcat', keywords: ['longcat'] }, { slug: 'kwaipilot', keywords: ['kat-'] }, { slug: 'nova', keywords: ['^nova-', '/nova-'] }, { slug: 'xiaomimimo', keywords: ['^mimo-', '/mimo-'] }, { slug: 'baai', keywords: ['^baai', '^bge-', '/beg-', 'touchd', 'robobrain'] }, { slug: 'ace', keywords: ['ace-step'] }, ] export const openAIModelBackgrounds: Record< NonNullable, string > = { gpt3: '#19C37D', gpt4: '#AB68FF', gpt5: '#F86AA4', o1: '#F9C322', oss: '#0099FF', platform: '#0000FE', }