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) => (
{