enzostvs HF Staff commited on
Commit
6d1a281
·
1 Parent(s): d738d0d

improve UI of model selector

Browse files
components/editor/ask-ai/settings.tsx CHANGED
@@ -67,6 +67,24 @@ export function Settings({
67
  }
68
  }, [model, provider]);
69
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  return (
71
  <Popover open={open} onOpenChange={onClose}>
72
  <PopoverTrigger asChild>
@@ -115,19 +133,24 @@ export function Settings({
115
  </SelectTrigger>
116
  <SelectContent>
117
  <SelectGroup>
118
- <SelectLabel>Models</SelectLabel>
119
- {MODELS.map(
120
- ({
 
 
 
 
 
 
 
 
 
121
  value,
122
  label,
123
  isNew = false,
124
  isThinker = false,
125
- }: {
126
- value: string;
127
- label: string;
128
- isNew?: boolean;
129
- isThinker?: boolean;
130
- }) => (
131
  <SelectItem
132
  key={value}
133
  value={value}
@@ -141,8 +164,8 @@ export function Settings({
141
  </span>
142
  )}
143
  </SelectItem>
144
- )
145
- )}
146
  </SelectGroup>
147
  </SelectContent>
148
  </Select>
 
67
  }
68
  }, [model, provider]);
69
 
70
+ const formattedModels = useMemo(() => {
71
+ const lists: ((typeof MODELS)[0] | { isCategory: true; name: string })[] =
72
+ [];
73
+ const keys = new Set<string>();
74
+ MODELS.forEach((model) => {
75
+ if (!keys.has(model.companyName)) {
76
+ lists.push({
77
+ isCategory: true,
78
+ name: model.companyName,
79
+ logo: model.logo,
80
+ });
81
+ keys.add(model.companyName);
82
+ }
83
+ lists.push(model);
84
+ });
85
+ return lists;
86
+ }, [MODELS]);
87
+
88
  return (
89
  <Popover open={open} onOpenChange={onClose}>
90
  <PopoverTrigger asChild>
 
133
  </SelectTrigger>
134
  <SelectContent>
135
  <SelectGroup>
136
+ {formattedModels.map((item: any) => {
137
+ if ("isCategory" in item) {
138
+ return (
139
+ <SelectLabel
140
+ key={item.name}
141
+ className="flex items-center gap-1"
142
+ >
143
+ {item.name}
144
+ </SelectLabel>
145
+ );
146
+ }
147
+ const {
148
  value,
149
  label,
150
  isNew = false,
151
  isThinker = false,
152
+ } = item;
153
+ return (
 
 
 
 
154
  <SelectItem
155
  key={value}
156
  value={value}
 
164
  </span>
165
  )}
166
  </SelectItem>
167
+ );
168
+ })}
169
  </SelectGroup>
170
  </SelectContent>
171
  </Select>
lib/providers.ts CHANGED
@@ -40,34 +40,7 @@ export const MODELS = [
40
  providers: ["fireworks-ai", "nebius", "sambanova", "novita", "hyperbolic"],
41
  autoProvider: "novita",
42
  logo: DeepSeekLogo,
43
- },
44
- // {
45
- // value: "deepseek-ai/DeepSeek-R1-0528",
46
- // label: "DeepSeek R1 0528",
47
- // providers: [
48
- // "fireworks-ai",
49
- // "novita",
50
- // "hyperbolic",
51
- // "nebius",
52
- // "together",
53
- // "sambanova",
54
- // ],
55
- // autoProvider: "novita",
56
- // isThinker: true,
57
- // },
58
- {
59
- value: "Qwen/Qwen3-Coder-480B-A35B-Instruct",
60
- label: "Qwen3 Coder 480B A35B Instruct",
61
- providers: ["novita", "hyperbolic"],
62
- autoProvider: "novita",
63
- logo: QwenLogo,
64
- },
65
- {
66
- value: "moonshotai/Kimi-K2-Instruct",
67
- label: "Kimi K2 Instruct",
68
- providers: ["together", "novita", "groq"],
69
- autoProvider: "groq",
70
- logo: KimiLogo,
71
  },
72
  {
73
  value: "deepseek-ai/DeepSeek-V3.1",
@@ -75,13 +48,7 @@ export const MODELS = [
75
  providers: ["fireworks-ai", "novita"],
76
  autoProvider: "fireworks-ai",
77
  logo: DeepSeekLogo,
78
- },
79
- {
80
- value: "moonshotai/Kimi-K2-Instruct-0905",
81
- label: "Kimi K2 Instruct 0905",
82
- providers: ["together", "groq", "novita"],
83
- autoProvider: "groq",
84
- logo: KimiLogo,
85
  },
86
  {
87
  value: "deepseek-ai/DeepSeek-V3.1-Terminus",
@@ -89,6 +56,7 @@ export const MODELS = [
89
  providers: ["novita"],
90
  autoProvider: "novita",
91
  logo: DeepSeekLogo,
 
92
  },
93
  {
94
  value: "deepseek-ai/DeepSeek-V3.2-Exp",
@@ -97,5 +65,30 @@ export const MODELS = [
97
  autoProvider: "novita",
98
  logo: DeepSeekLogo,
99
  isNew: true,
100
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  ];
 
40
  providers: ["fireworks-ai", "nebius", "sambanova", "novita", "hyperbolic"],
41
  autoProvider: "novita",
42
  logo: DeepSeekLogo,
43
+ companyName: "DeepSeek",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  },
45
  {
46
  value: "deepseek-ai/DeepSeek-V3.1",
 
48
  providers: ["fireworks-ai", "novita"],
49
  autoProvider: "fireworks-ai",
50
  logo: DeepSeekLogo,
51
+ companyName: "DeepSeek",
 
 
 
 
 
 
52
  },
53
  {
54
  value: "deepseek-ai/DeepSeek-V3.1-Terminus",
 
56
  providers: ["novita"],
57
  autoProvider: "novita",
58
  logo: DeepSeekLogo,
59
+ companyName: "DeepSeek",
60
  },
61
  {
62
  value: "deepseek-ai/DeepSeek-V3.2-Exp",
 
65
  autoProvider: "novita",
66
  logo: DeepSeekLogo,
67
  isNew: true,
68
+ companyName: "DeepSeek",
69
+ },
70
+ {
71
+ value: "Qwen/Qwen3-Coder-480B-A35B-Instruct",
72
+ label: "Qwen3 Coder 480B A35B Instruct",
73
+ providers: ["novita", "hyperbolic"],
74
+ autoProvider: "novita",
75
+ logo: QwenLogo,
76
+ companyName: "Qwen",
77
+ },
78
+ {
79
+ value: "moonshotai/Kimi-K2-Instruct",
80
+ label: "Kimi K2 Instruct",
81
+ providers: ["together", "novita", "groq"],
82
+ autoProvider: "groq",
83
+ logo: KimiLogo,
84
+ companyName: "Kimi",
85
+ },
86
+ {
87
+ value: "moonshotai/Kimi-K2-Instruct-0905",
88
+ label: "Kimi K2 Instruct 0905",
89
+ providers: ["together", "groq", "novita"],
90
+ autoProvider: "groq",
91
+ logo: KimiLogo,
92
+ companyName: "Kimi",
93
+ },
94
  ];