From ca81de39c958f7164851ff6e7b4fea73175ca652 Mon Sep 17 00:00:00 2001 From: KiGamji Date: Tue, 27 Jan 2026 02:23:36 +0500 Subject: [PATCH] fix(ui): use distinct color palette for group tags --- web/src/helpers/render.jsx | 58 ++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 15 deletions(-) diff --git a/web/src/helpers/render.jsx b/web/src/helpers/render.jsx index 36aa7cbe9..14b87334f 100644 --- a/web/src/helpers/render.jsx +++ b/web/src/helpers/render.jsx @@ -167,21 +167,21 @@ export const getModelCategories = (() => { gemini: { label: 'Gemini', icon: , - filter: (model) => - model.model_name.toLowerCase().includes('gemini') || + filter: (model) => + model.model_name.toLowerCase().includes('gemini') || model.model_name.toLowerCase().includes('gemma') || - model.model_name.toLowerCase().includes('learnlm') || + model.model_name.toLowerCase().includes('learnlm') || model.model_name.toLowerCase().startsWith('embedding-') || model.model_name.toLowerCase().includes('text-embedding-004') || - model.model_name.toLowerCase().includes('imagen-4') || - model.model_name.toLowerCase().includes('veo-') || - model.model_name.toLowerCase().includes('aqa') , + model.model_name.toLowerCase().includes('imagen-4') || + model.model_name.toLowerCase().includes('veo-') || + model.model_name.toLowerCase().includes('aqa'), }, moonshot: { label: 'Moonshot', icon: , - filter: (model) => - model.model_name.toLowerCase().includes('moonshot') || + filter: (model) => + model.model_name.toLowerCase().includes('moonshot') || model.model_name.toLowerCase().includes('kimi'), }, zhipu: { @@ -189,8 +189,8 @@ export const getModelCategories = (() => { icon: , filter: (model) => model.model_name.toLowerCase().includes('chatglm') || - model.model_name.toLowerCase().includes('glm-') || - model.model_name.toLowerCase().includes('cogview') || + model.model_name.toLowerCase().includes('glm-') || + model.model_name.toLowerCase().includes('cogview') || model.model_name.toLowerCase().includes('cogvideo'), }, qwen: { @@ -206,8 +206,8 @@ export const getModelCategories = (() => { minimax: { label: 'MiniMax', icon: , - filter: (model) => - model.model_name.toLowerCase().includes('abab') || + filter: (model) => + model.model_name.toLowerCase().includes('abab') || model.model_name.toLowerCase().includes('minimax'), }, baidu: { @@ -233,7 +233,7 @@ export const getModelCategories = (() => { cohere: { label: 'Cohere', icon: , - filter: (model) => + filter: (model) => model.model_name.toLowerCase().includes('command') || model.model_name.toLowerCase().includes('c4ai-') || model.model_name.toLowerCase().includes('embed-'), @@ -256,7 +256,7 @@ export const getModelCategories = (() => { mistral: { label: 'Mistral AI', icon: , - filter: (model) => + filter: (model) => model.model_name.toLowerCase().includes('mistral') || model.model_name.toLowerCase().includes('codestral') || model.model_name.toLowerCase().includes('pixtral') || @@ -602,6 +602,34 @@ export function stringToColor(str) { return colors[i]; } +// High-contrast color palette for group tags (avoids similar blue/teal shades) +const groupColors = [ + 'red', + 'orange', + 'yellow', + 'lime', + 'green', + 'cyan', + 'blue', + 'indigo', + 'violet', + 'purple', + 'pink', + 'amber', + 'grey', +]; + +export function groupToColor(str) { + // Use a better hash algorithm for more even distribution + let hash = 0; + for (let i = 0; i < str.length; i++) { + hash = (hash << 5) - hash + str.charCodeAt(i); + hash = hash & hash; + } + hash = Math.abs(hash); + return groupColors[hash % groupColors.length]; +} + // 渲染带有模型图标的标签 export function renderModelTag(modelName, options = {}) { const { @@ -670,7 +698,7 @@ export function renderGroup(group) { {groups.map((group) => ( {